检查ListView中的所有适配器元素

时间:2019-04-10 22:38:28

标签: android listview adapter

我有CustomAdapter,用于在ListView中填充一些数据。

ListView中的每个元素都有两个变量。对于每个列表视图(在onItemClick方法中),我必须检查此变量,如果它们相同,则执行一些代码;如果它们不同,则执行另一次代码,例如Toast.makeText(EPG.this, "Variables are different", Toast.LENGTH_SHORT).show();

所以我已经尝试过:

private List<SomeItem> items = new ArrayList();  
//items were created
SomeAdapter adapter = new SomeAdapter(this, R.layout.list_item, items);
listView.setAdapter(adapter);


listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    for(int i=0; i<=items.size(); i++) {
                        SomeItem item = items.get(position);

                        String tmpCI = item.getFirstVariable();
                        String tmpPCI = item.getecondVariable();

                        if (!tmpCI.equals(tmpPCI)) {
                            //some code
                        } else {
                            Toast.makeText(EPG.this, "Variables are different", Toast.LENGTH_SHORT).show();
                        }

                    }
                    }
            });

但是我所有的listview元素都具有这两个变量中第一个元素的值。

那么我该如何做item.next();之类的操作来验证列表视图中的所有项目?

UPD:

对不起,在检查了列表视图项的变量以了解我的问题后,我将提供更多有关我在做什么的信息。

我还有一个适配器:

SomeAnotherAdapter adapterPr = new SomeAnotherAdapter(this, R.layout.list_tem_another, itemsAnother);

和另外一个列表视图:

listViewAnother.setAdapter(adapterPr);

首先,我了解到,第一个变量应该来自第一个列表视图,第二个变量应该来自另一个列表视图。

在此listViewAnother中,我有很多项,其中有些“ id”。例如,第1,第5和第20个元素的ID为90,其他元素的ID为100。 我们可以说,第一个列表视图中的项也具有“ id”。

所以我必须检查if(first variable = second variable),然后在listView中显示另一个ID等于listView中单击的项目的ID的项目。

我尝试过:adapterPr.remove(item2);,但后来我了解到,我需要所有物品,因为我可以返回listView并按另一个需要那些已删除元素的物品。

现在,希望我提供了完整的信息,您将能够帮助我改善代码。

1 个答案:

答案 0 :(得分:0)

当您单击适配器的一个元素时,是否需要对适配器的每个元素执行检查?如果没有,则不需要循环。如果这样做,则循环应在原始列表上进行迭代,并且根本不需要适配器位置。

通常,在使用适配器和列表时,应使用适配器的位置和适配器的数据集执行任何任务。使用适配器位置从原始列表中获取项目不是一个好习惯。

只需设置一个onItemClickListener即可从适配器中获取相应的item,然后从那里进行操作:

private List<SomeItem> items = new ArrayList();  
//items were created
SomeAdapter adapter = new SomeAdapter(this, R.layout.list_item, items);
listView.setAdapter(adapter);


listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        SomeItem item = adapter.getItem(position);

        String tmpCI = item.getFirstVariable();
        String tmpPCI = item.getecondVariable();

        if (!tmpCI.equals(tmpPCI)) {
            //some code
        } else {
            Toast.makeText(EPG.this, "Variables are different", Toast.LENGTH_SHORT).show();
        }

    }
});