#android #listview #adapter
#Android #listview #адаптер
Вопрос:
У меня есть CustomAdapter, который я использую для заполнения ListView некоторыми данными.
Каждый элемент в 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();
для проверки всех элементов в listview?
UPD:
Извините, я предоставлю больше информации о том, что я делаю, после проверки переменных элементов listview для понимания моей проблемы.
У меня есть еще один адаптер:
SomeAnotherAdapter adapterPr = new SomeAnotherAdapter(this, R.layout.list_tem_another, itemsAnother);
и еще один listview:
listViewAnother.setAdapter(adapterPr);
Прежде всего, я понял, что первая переменная должна быть из первого listview, а вторая переменная из другого listview.
В этом ListView У меня есть много элементов, у которых есть некоторый «идентификатор». Например, 1-й, 5-й и 20-й элементы имеют идентификатор 90, а другие элементы имеют идентификатор 100. Мы можем сказать, что элементы из первого listview также имеют «id».
Поэтому я должен проверить if(first variable = second variable)
, а затем показать в ListView другие только те элементы, которые имеют идентификатор, равный идентификатору из выбранного элемента в ListView.
Я попытался: adapterPr.remove(item2);
но потом я понял, что мне нужны все элементы, потому что я могу вернуться в ListView и нажать другой элемент, для которого понадобятся эти удаленные элементы.
Теперь, надеюсь, я предоставил полную информацию, и вы сможете помочь мне улучшить мой код.
Комментарии:
1. Нет необходимости в цикле, если вы хотите сравнить значение переменных одного и того же (нажатого) элемента.
2. предоставлено больше информации о моей проблеме
3. Попробуйте replace:
SomeItem item = items.get(position);
toSomeItem item = items.get(i);
, если вы хотите повторить весь ArrayList. items.get(position) внутри for-цикла, просто повторно получая одни и те же данные. Надеюсь, это поможет!
Ответ №1:
Нужно ли выполнять проверку каждого элемента адаптера при нажатии на один элемент адаптера? Если нет, вам не нужен цикл. Если вы это сделаете, ваш цикл должен повторять исходный список и вообще не нуждается в позиции адаптера.
В общем, при использовании адаптеров и списков вы должны использовать позицию адаптера и набор данных адаптера для выполнения любых задач. Не рекомендуется использовать позицию адаптера для получения элемента из исходного списка.
Просто установите тот 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();
}
}
});
Комментарии:
1. Я задал свой вопрос с более конкретной информацией, посмотрите, пожалуйста