我有一个显示公司列表的数组列表。这些公司中的每一家都有与之相关的城镇名称。我所做的是我正在为每个城镇名称创建按钮,这样当我点击任何城镇名称时,应该过滤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) {
locationFilter(stringList,length);
}
});
为了过滤数据,我正在创建一个新的ArrayList来存储过滤后的数据,例如
ArrayList<CompanySearchResult> secondList = new ArrayList<CompanySearchResult>();
for (CompanySearchResult a : tempList) {
for (int k = 0; k < length; k++) {
if (a.getTownName.equalsIgnoreCase(stringList.get(k))) {
secondList.add(a);
}
}
}
tempList.clear();
tempList.addAll(secondList);
我实际上要做的是在点击按钮时根据城镇名称过滤临时列表。
我对此进行了研究,但无法解决问题。任何人都可以告诉我我做错了什么以及如何过滤列表。
答案 0 :(得分:0)
这里的问题是因为按钮是根据城镇名称的数量(删除了重复项)以编程方式创建的,所以stringList.get(k)并没有正确地给出与所点击的按钮对应的城镇名称。
因此,在点击按钮时,我在按钮中显示了城镇名称,然后将其传递给方法以过滤数据,
btnTag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CharSequence name = btnTag.getText();
locationFilter(name);
}
});
在我的过滤方法中,我改为
ArrayList<ACompanyForSearchResult> filtered = new ArrayList<ACompanyForSearchResult>();
for (ACompanyForSearchResult town : tempList) {
if (town.getTownName().equals(name)) {
filtered.add(town);
}
}
tempList.clear();
tempList.addAll(filtered);
listAdapter.notifyDataSetChanged();