我有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();
之类的操作来验证列表视图中的所有项目?
对不起,在检查了列表视图项的变量以了解我的问题后,我将提供更多有关我在做什么的信息。
我还有一个适配器:
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并按另一个需要那些已删除元素的物品。
现在,希望我提供了完整的信息,您将能够帮助我改善代码。
答案 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();
}
}
});