Проверьте все элементы адаптера в ListView - PullRequest
3 голосов
/ 11 апреля 2019

У меня есть 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();
                        }

                    }
                    }
            });

Но все мои элементы списка имеют значения первого элемента в этих двух переменных.

Так, как я могу сделать что-то вроде item.next(); для проверки всех элементов в просмотре списка?

UPD:

Извините, я предоставлю больше информации о том, что я делаю после проверки переменных элементов списка, чтобы понять мою проблему.

У меня есть еще один адаптер:

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

и еще один просмотр списка:

listViewAnother.setAdapter(adapterPr);

Прежде всего я понял, что первая переменная должна быть из первого списка, а вторая переменная из другого списка.

В этом списке ViewAnother у меня много предметов, у которых есть некоторый "id". Например, 1-й, 5-й и 20-й элементы имеют идентификатор 90, а другие элементы имеют идентификатор 100. Можно сказать, что элементы из первого списка также имеют «id».

Так что я должен проверить if(first variable = second variable), а затем показать в listViewAnother только элементы с идентификатором, равным идентификатору от выбранного элемента в listView.

Я попытался: adapterPr.remove(item2);, но потом понял, что мне нужны все элементы, потому что я могу вернуться к listView и нажать другой элемент, для которого понадобятся эти удаленные элементы.

Теперь, надеюсь, я предоставил полную информацию, и вы сможете помочь мне улучшить мой код.

1 Ответ

0 голосов
/ 11 апреля 2019

Нужно ли выполнять проверку каждого элемента адаптера, когда вы нажимаете один элемент адаптера? Если нет, вам не нужен цикл. Если вы это сделаете, ваш цикл должен перебирать исходный список и вообще не нуждаться в позиции адаптера.

Как правило, при использовании адаптеров и списков вы должны использовать положение адаптера и набор данных адаптера для выполнения любых задач. Неправильно использовать позицию адаптера для получения элемента из исходного списка.

Просто установите один 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();
        }

    }
});
...