Проверьте все элементы адаптера в ListView

#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); to SomeItem 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. Я задал свой вопрос с более конкретной информацией, посмотрите, пожалуйста