我已经通过论坛阅读了,我似乎无法弄清楚如何获取所选项目的位置以匹配我的数组列表项目,因为列表视图是可搜索的。它工作得很好,直到我搜索然后我的项目不匹配。有人可以提供一个确切的例子吗?
private void displayListView() {
ArrayList<Country> countryList = new ArrayList<Country>();
//countryList.clear();
// int j=1;
for (int i = 0; i < categoriesList.size(); i++) {
//list.add(new ItemData(categoriesList.get(i).getName(), R.drawable.ic_launcher));
//Array list of countries
Country country = new Country(workordertypeId.get(i),ActualCity.get(i),ClientName.get(i),
ProjectNotes.get(i), ProjectStart.get(i),ProjectFieldNotes.get(i),ProjectStatus.get(i));
countryList.add(country);
///////list.add(new StringWithTag(categoriesList.get(i).getName(),categoriesList2.get(i).getName()));
//list.add(new ItemData("testthis",R.drawable.logolong4));
}
//create an ArrayAdaptar from the String Array
dataAdapter = new MyCustomAdapter(this,
R.layout.country_info, countryList);
ListView listView = (ListView) findViewById(R.id.listView1);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
//enables filtering for the contents of the given ListView
listView.setTextFilterEnabled(true);
//listView.has
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
setwoindex(position);
//setwoindex (parent.getSelectedItemPosition());
//listView.getItemId(position)
Country country = (Country) parent.getItemAtPosition(position);
//Toast.makeText(getApplicationContext(),
//country.getCode(), Toast.LENGTH_SHORT).show();
//Toast.makeText(getApplicationContext(),
//country.getRegion(), Toast.LENGTH_SHORT).show();
String haspdf = getIntent().getExtras().getString("haspdf", "defaultKey");
if (haspdf.equals("1")) {
//counter++;
btnAddNewCategory.setText("Save PDF");
btnAddNewCategory.setEnabled(true);
} else if (haspdf.equals("0")) {
btnAddNewCategory.setEnabled(false);
}
if (haspdf.equals("3")) {
//counter++;
btnAddNewCategory.setText("Save Image");
btnAddNewCategory.setEnabled(true);
} else if (haspdf.equals("0")) {
btnAddNewCategory.setEnabled(false);
}
//updateGUI();
//Toast.makeText(getBaseContext(), "test", Toast.LENGTH_SHORT).show();
//spinnerFood.setTag(pos);
if (getwoindex() != null) {
// punchin.setEnabled(true);
Viewattachments.setEnabled(true);
//punchin.setEnabled(true);
// punchout.setEnabled(true);
//btnAddNewCategory.setEnabled(true);
int index = getwoindex();
//Toast.makeText(getBaseContext(),"WorkOrderNumber Toasting="+ workordertypeId.get(index).toString() +" "+ClientName.get(index).toString()+" "+ActualCity.get(index).toString()+" "+ClientPhone.get(index).toString(), Toast.LENGTH_SHORT).show();
FullAddress.setText(WoClientName.get(index).toString() + "\n" + WoClientStreet.get(index).toString() + "\n" + ActualCity.get(index).toString() + " " + WoClientState.get(index).toString() + " " + WoClientZip.get(index).toString());
ActualPhone.setText(WoClientPhone.get(index).toString());
String IdUser = getIntent().getStringExtra("IdUser");
String usernameforlogin = getIntent().getStringExtra("usernameforlogin");
mrcastrovinci();
}
}
});
EditText myFilter = (EditText) findViewById(R.id.myFilter);
myFilter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
dataAdapter.getFilter().filter(s.toString());
}
});
}
private class MyCustomAdapter extends ArrayAdapter<Country> {
private ArrayList<Country> originalList;
private ArrayList<Country> countryList;
private CountryFilter filter;
public MyCustomAdapter(Context context, int textViewResourceId,
ArrayList<Country> countryList) {
super(context, textViewResourceId, countryList);
this.countryList = new ArrayList<Country>();
this.countryList.addAll(countryList);
this.originalList = new ArrayList<Country>();
this.originalList.addAll(countryList);
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public android.widget.Filter getFilter() {
if (filter == null){
filter = new CountryFilter();
}
return filter;
}
private class ViewHolder {
TextView code;
TextView name;
TextView continent;
TextView region;
TextView Dated;
TextView ProjectFieldNotes;
TextView ProjectStatus;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Log.v("ConvertView", String.valueOf(position));
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.country_info, null);
holder = new ViewHolder();
holder.code = (TextView) convertView.findViewById(R.id.code);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.continent = (TextView) convertView.findViewById(R.id.continent);
holder.region = (TextView) convertView.findViewById(R.id.region);
holder.Dated = (TextView) convertView.findViewById(R.id.dated);
holder.ProjectFieldNotes = (TextView) convertView.findViewById(R.id.ProjectFieldNotes);
holder.ProjectStatus = (TextView) convertView.findViewById(R.id.ProjectStatus);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Country country = countryList.get(position);
holder.code.setText(country.getCode());
holder.name.setText(country.getName());
holder.continent.setText(country.getContinent());
holder.region.setText(country.getRegion());
holder.Dated.setText(country.getDated());
holder.ProjectFieldNotes.setText(country.getProjectFieldNotes());
holder.ProjectStatus.setText(country.getProjectStatus());
return convertView;
}
private class CountryFilter extends android.widget.Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if(constraint != null && constraint.toString().length() > 0)
{
ArrayList<Country> filteredItems = new ArrayList<Country>();
for(int i = 0, l = originalList.size(); i < l; i++)
{
Country country = originalList.get(i);
if(country.toString().toLowerCase().contains(constraint))
filteredItems.add(country);
}
result.count = filteredItems.size();
result.values = filteredItems;
}
else
{
synchronized(this)
{
result.values = originalList;
result.count = originalList.size();
}
}
return result;
//setwoindex(ListView1.getSelectedItemPosition());
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
countryList = (ArrayList<Country>)results.values;
notifyDataSetChanged();
clear();
for(int i = 0, l = countryList.size(); i < l; i++)
add(countryList.get(i));
notifyDataSetInvalidated();
}
}
}
答案 0 :(得分:1)
扩展Country对象以包含id / index吗?
是否可以接受如果是,那将一直存储,你可以在onItemClick中为你的ListView检索它。
如果没有,您可以围绕Country对象构建一个包装器,并将其提供给适配器或让适配器构造一个包装器列表。
public class MyWrapper {
public Country mCountry;
public int mOriginalIndex;
}
答案 1 :(得分:0)
是的,我实际上只是扩展了我的国家/地区列表并在那里包含了我的所有项我也会添加索引ID。