我正在设置一个带有相应 ListView 的适配器。当我过滤适配器和 ListView 时,我输出它们的计数,但它仍然是相同的。但是,在应用程序上,listView 似乎已被过滤,因为它仅显示与过滤器输入匹配的项目(在本例中为“Berlin”)。
String string_list[] = {"Paris", "London", "Milano", "Madrid", "Berlin", "Moscow", "Washington" };
// Set up ListView and Adapter
myAdapt = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,string_list);
myListView.setAdapter(myAdapt);
myListView.setItemsCanFocus(false);
myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View itemView, int position,
long arg3) {
// One of my methods
manageFavorites(arg0, itemView, position, arg3, myListView);
}
});
// Debug
myAdapt.getFilter().filter("B");
tv1.setText("myAdapt.getCount() =" + myAdapt.getCount());
myListView.setTextFilterEnabled(true);
myListView.setFilterText("B");
tv2.setText("myListView.getCount() =" + myListView.getCount());
有没有一种方法可以在适配器或 ListView 上调用过滤器时,变量根据过滤器而变化?在本例中,我使用字符 B
过滤 myAdapt
和 myListView
,因此我希望有 myAdapt
和myListView
携带唯一与该字符匹配的项目,即 Berlin
。
请注意,我的类扩展了Activity
。请指出我是否应该使用 ListActivity
或 CustomAdapter
,正如我在 SOF 中看到的那样。
最佳答案
您必须在过滤器上添加一个监听器,该监听器将在过滤完成时触发。
myAdapt.getFilter().filter("B", new Filter.FilterListener() {
public void onFilterComplete(int count) {
tv2.setText("myListView.getCount() =" + count);
}
}
参见Filter class有关详细信息,请参阅 Android 引用。
关于java - ListView 和适配器过滤器未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22744892/