- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个显示公司列表的数组列表。这些公司中的每一个都有相应的城镇名称。此外,我正在为每个城镇名称创建按钮,这样当我单击任何城镇名称时,ArrayList 应该被过滤并且只显示具有该城镇名称的公司。
按钮就像,
stringList.add(tempList.get(n).getTownName());
btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 60));
btnTag.setText(stringList.get(k));
btnTag.setBackgroundResource(R.drawable.alpha_button_selector);
btnTag.setClickable(true);
townLayout.addView(btnTag);
单击按钮时,我会在按钮中获取显示城镇名称的文本,然后调用方法来过滤数据,
btnTag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CharSequence name = btnTag.getText();
locationFilter(name);
}
});
为了过滤数据,我创建了一个新的 ArrayList 来存储过滤后的数据,例如,
ArrayList<CompanySearchResult> filtered = new ArrayList<CompanySearchResult>();
for (CompanySearchResult town : tempList) {
if (town.getTownName().equals(name)) {
filtered.add(town);
}
}
tempList.clear();
tempList.addAll(filtered);
listAdapter.notifyDataSetChanged();
数据被正确过滤,但我的问题是当我第一次过滤数据时,我的 tempList(这是包含数据的主要 ArrayList)被过滤后的 ArrayList 的内容更新。然后,当我单击具有另一个城镇名称的第二个按钮并尝试对其进行过滤时,它会尝试过滤已使用过滤数据更新的 tempList,但显示的结果为空白。
因此,如何在每次单击具有城镇名称的按钮时再次使用原始数据填充我的 tempList,然后以类似的方式将其过滤掉。
我已经对此进行了研究,但找不到任何相关内容。我也尝试过链接中提到的解决方案:
android filter custom array adapter and bring back old items again
How can i take a backup of an ArrayList in Java after i call .clear()?
然而,这并没有帮助。谁能帮助我如何实现这一目标?
最佳答案
@Traxdata 回答正确。这是我在代码中的解释
修改你的适配器
public class YourAdapter extends RecyclerView.Adapter {
YourAdapter(List<CompanySearchResult> filterList){
}
}
在你的Activity
YourAdapter listAdapter = new YourAdapter(filterList);
第一次显示列表
filterList = new ArrayList<>(tempList);
listAdapter.notifyDataSetChanged();
过滤时
ArrayList < CompanySearchResult > filtered = new ArrayList < CompanySearchResult > ();
for (CompanySearchResult town: tempList) {
if (town.getTownName().equals(name)) {
filtered.add(town);
}
}
filterList.clear();
filterList.addAll(filtered);
listAdapter.notifyDataSetChanged();
关于android - 清除后如何在 arraylist 中检索项目 : Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45606358/
我是一名优秀的程序员,十分优秀!