项目单击侦听器中的位置在过滤时不会刷新

时间:2015-03-11 10:54:37

标签: java android android-intent

我在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);
                            }
                        });

2 个答案:

答案 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();

这样做是获取所点击项目的位置。现在,您在点击时最终会找到正确的位置。

另外,如果有更好的方式做我做的事情,请告诉我。