Как обратиться к элементу списка ListView при клике?

Ответить
asdvolodya10
Сообщения: 2
Зарегистрирован: 12 июл 2020, 16:28

Как обратиться к элементу списка ListView при клике?

Сообщение asdvolodya10 » 12 июл 2020, 16:42

Вроде простой вопрос, но никак не могу найти ответ в нете. Буду как можно краток:
Дано: ListView (к примеру 10 строк), в каждой строке соответственно имеется по три TextView (text1, text2, text3)
Вопрос: как при клике на 4 (к примеру) строку изменить текст второго TextView (text2) внутри самого списка?

Интересует сам доступ к text2?

Код: Выделить всё

        myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View myview = inflater.inflate(R.layout.mylistxml, null); // мой файл xml с тремя TextView
                TextView mytext2 = (TextView) myview.findViewById(R.id.text2); // собственно сама проблема, как получить доступ ко второму TextView

                mytext2.setText("1111111111"); // здесь ничего не менятеся почему-то
            }
        });

EugeneFrol
Сообщения: 3
Зарегистрирован: 27 июл 2020, 09:48

Re: Как обратиться к элементу списка ListView при клике?

Сообщение EugeneFrol » 01 авг 2020, 08:14

Если верить документации https://developer.android.com/reference ... ener?hl=en
то:
parent - от ссылка на сам ListView
view - это ссылка на строку по которой кликнули
position - это номер позиции в списке, начиная с 0
id - это идентификатор строки, при использовании cursor

Думаю, доступ к mytext2 можно получить так:
TextView mytext2 = (TextView) view.findViewById(R.id.text2);

view должен ссылаться на LinearLayout (или другой ViewGroup), который и будет содержать все 3 текстовых поля

Однако нужно помнить, что когда view при прокрутке ListView на экране скроется, то Adapter его уничтожит или может использовать повторно, заполняя другими данными.
Поэтому значение, которое должно быть в mytext2, лучше сохранять в самом источнике данных через getItemAtPosition(position).

Ответить