单击搜索结果项时结果页面无效



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);

最新更新