我在android中有一个listview,可以通过操作栏中的searchview过滤。
列表中的每个项目都是可点击的,并带您到另一张照片。我为此做的是:
//inside setOnItemClickListener...
String itemPosition = item.get(position).getItemURL();
Intent i = new Intent(this, NextActivity.class);
i.putExtra("key", itemPosition.toString());
startActivity(i);
如果我不使用搜索功能,它会很有效。但是一旦你尝试过滤列表,它就会加载以前在同一位置的项目的照片。
我的问题/ s:有没有办法告诉android在过滤时刷新位置?我想如果这些职位与名单一起刷新,那就可以了。
另外,有没有更好的方法来做我正在做的事情?
完整代码:ad是一个自定义baseadapter,它接受上下文,列表,实现Filterable
ad = new GridViewAdapter(this, item);
SwingBottomInAnimationAdapter swingBottomInAnimationAdapter = new SwingBottomInAnimationAdapter(ad);
swingBottomInAnimationAdapter.setAbsListView(activity_gridview_gv);
assert swingBottomInAnimationAdapter.getViewAnimator() != null;
swingBottomInAnimationAdapter.getViewAnimator().setInitialDelayMillis(DELAY);
activity_gridview_gv.setAdapter(swingBottomInAnimationAdapter);
activity_gridview_gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String itemPosition = item.get(position).getItemURL();
Intent i = new Intent(this, NextActivity.class);
i.putExtra("key", itemPosition.toString());
startActivity(i);
}
});
答案 0 :(得分:0)
你可以试试这个。
在适配器中写入列表getter和setter。
将新的筛选列表设置为适配器并执行
notifyDataSetChanged();
答案 1 :(得分:0)
虽然每个人的答案在某种程度上都是正确的,但似乎我手头有一个不同的问题。问题仍然有效,我将发布我的解决方案。
我的问题是没有刷新适配器。
这是List&#34; item&#34;一旦适配器收到更改通知,就不会更新。参见:
String itemPosition = item.get(position).getItemURL();
我从未真正更新&#34; item&#34;。事实上,我打电话给旧的未经过滤的名单!接下来发生的事情是过滤器确实有效并更新列表,但我最终使用旧列表&#34; item&#34;。因此,将我链接到同一位置的前一个对象。
解决方案:点击后获取项目的位置。
在onItemClick里面:
MainGridItem filteredItem = (MainGridItem) ad.getItem(position);
String itemPosition = filteredItem.get(position).getItemURL();
这样做是获取所点击项目的位置。现在,您在点击时最终会找到正确的位置。
另外,如果有更好的方式做我做的事情,请告诉我。