ArrayList Custom class
ArrayList<ItemClass> nomenclatureList
有它的onItemClickListener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
ItemClass word = nomenclatureList.get(position);
int singleImg = word.getImageResourse();
String singleName = word.getNomenclatureName();
String singleWeight = word.getNomenclatureWeight();
String singleBrand = word.getNomeclatureBrand();
String singleBar = word.getNomenclatureBarCode();
String singlePercent = word.getNomenclaturePercent();
String singleComposition = word.getNomenclatureComposition();
String singlePack = word.getNomenclaturePack();
Intent intent = new Intent(ItemListGKI.this, ItemSingle.class);
intent.putExtra("SINGLE_IMG_KEY", singleImg);
intent.putExtra("SINGLE_NAME_KEY", singleName);
intent.putExtra("SINGLE_WEIGHT_KEY", singleWeight);
intent.putExtra("SINGLE_BRAND_KEY", singleBrand);
intent.putExtra("SINGLE_BAR_KEY", singleBar);
intent.putExtra("SINGLE_PERCENT_KEY", singlePercent);
intent.putExtra("SINGLE_COMPOSITION_KEY", singleComposition);
intent.putExtra("SINGLE_PACK_KEY", singlePack);
startActivity(intent);
}
});
并且有来自此数组列表的搜索代码
@Override
public boolean onQueryTextChange(String newText) {
boolean success = false;
ArrayList<String> tempList = new ArrayList<>();
for(ItemClass temp : nomenclatureList){
if(temp.getNomenclatureName().toLowerCase().contains(newText.toLowerCase())){
tempList.add(temp.getNomenclatureName());
ArrayAdapter<String> adapter = new ArrayAdapter<>(ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
listView.setAdapter(adapter);
tempList.size();
success = true;
}
}
return success;
}
当我单击搜索结果项时,打开的活动包含错误的信息。如果我在不使用搜索的情况下单击项目-一切都很好。
我不知道我必须做些什么来修复它。
替换这个:
ItemClass word = nomenclatureList.get(position);
有了这个
ItemClass word = (ItemClass) adapterView.getItemAtPosition(position);
为什么?因为nomenclatureList在搜索或过滤数据时具有与设置适配器不同的数据,因此例如nomenclatureList.get(5)
与(ItemClass) adapterView.getItemAtPosition(position);
不同
现在在onQueryTextChange中,你应该输入:
@Override
public boolean onQueryTextChange(String newText) {
boolean success = false;
ArrayList<ItemClass> tempList = new ArrayList<>();
for(ItemClass temp : nomenclatureList){
if(temp.getNomenclatureName().toLowerCase().contains(newText.toLowerCase())){
tempList.add(temp);
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
listView.setAdapter(adapter);
tempList.size();
if(tempList.size() > 0){
success = true;
}
return success;
}
根据此处定义的 API -> https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener
onItemClick(AdapterView<?> adapterView, View view, int position, long id)
您的代码正在考虑position
检索正在单击的项目。我相信它应该是id。尝试替换
ItemClass word = nomenclatureList.get(position);
跟
ItemClass word = nomenclatureList.get(id);