使用 customAdapter 后项目的错误位置

Wrong position of items after using a customAdapter

这是我用过的教程:http://www.tutorialsbuzz.com/2014/08/filter-custom-listviewbaseadapter.html

我对其实施了 onItemClickListener

    OnItemClickListener myListViewClicked = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            String member_name = countrylist.get(position).getName();
            // get Internet status
            isInternetPresent = cd.isConnectingToInternet();

            if (isInternetPresent) {
                if (member_name.equals("aa")) {
                    Intent i = new Intent(Listview.this, Start.class);
                    startActivity(i);
                    displayInterstitial();
            } else {
                prName.show();
            }
        }
    };
    lv.setOnItemClickListener(myListViewClicked);


}

所以,让我们假设我的原始列表是

Aa
BB
Ca
DD

然后我在过滤器中输入 'a',然后列表变成

Aa
Ca

但是当我单击 Ca 时,我会使用取决于每个列表项的 .equal 的进一步操作重定向到 BB。

我的列表和自定义适配器的代码与教程中的相同,但是我已经实现了 onclickitem 侦听器,所以我想我在其中遗漏了一些东西。我尝试搜索并找到了几个相同的问题,但 none 回答了,每个问题的自我回答都与我的不同,我无法将其应用于我的 cusotm 适配器。

这主要是因为您是直接访问数据集。

 String member_name = countrylist.get(position).getName();

在过滤过程中,您可能正在实例化和新 Collection 覆盖您在 Activity 中使用的引用。

使用

String member_name = ((Country)parent.getItemAtPosition(position)).getName();

它会起作用。

parent.getItemAtPosition(position) 访问您的 Adapter 中的基础数据集,如果您的 getItem 已正确实施

You can use

String memberName=(YourObject)parent.getAdapter().get(postion).getName;

很简单。