Java 项目单击侦听器中的位置在筛选时不刷新

Java 项目单击侦听器中的位置在筛选时不刷新,java,android,android-intent,Java,Android,Android Intent,我在android中有一个listview,可以通过操作栏中的searchview进行过滤 列表中的每个项目都可以单击,并将您带到不同的照片。我为此所做的是: //inside setOnItemClickListener... String itemPosition = item.get(position).getItemURL(); Intent i = ne

我在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);
如果我不使用搜索功能,效果会很好。。但是,一旦你尝试过滤列表,它就会加载该项目的照片,该项目以前位于相同的位置

我的问题:有没有办法告诉android在过滤后刷新位置?我想,如果职位与列表一起刷新,它将正常工作

还有,有没有更好的方法来做我正在做的事情

完整代码:ad是一个自定义baseadapter,它接受上下文、列表和可过滤的实现

                        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);
                            }
                        });
你可以试试这个。 在适配器中编写列表getter和setter。 将新筛选列表设置为适配器并执行

notifyDataSetChanged(); 

虽然每个人的答案在某种程度上都是正确的,但我手头似乎有一个不同的问题。这个问题仍然有效,我将发布我的解决方案

我的问题不是适配器没有刷新

当适配器收到更改通知后,列表项将不会更新。见:

String itemPosition = item.get(position).getItemURL();
我从未真正更新过这个项目。事实上,我是在调用旧的未过滤列表!接下来发生的事情是过滤器确实起作用并更新列表,但我最终使用了旧的列表项。因此,将我链接到同一位置的前一个对象

解决方案:单击获取项目的位置

在McClick内:

MainGridItem filteredItem = (MainGridItem) ad.getItem(position);
String itemPosition = filteredItem.get(position).getItemURL();
这样做的目的是获取单击项目的位置。现在,单击后,您将得到正确的位置


另外,请告诉我是否有更好的方法来完成我所做的工作。

在筛选列表时添加此项,notifyDataSetChanged;我尝试了你的两个建议,不起作用。请共享你正在尝试的代码。显示你的过滤器代码。我的代码中已经有完全相同的内容。它可以过滤列表并显示正确的项目,但不会刷新列表中的位置。您是否已检查是否从更新的同一列表中获取位置。或者它可能是旧的列表。