Подтвердить что ты не робот

Получить значение элемента в OnItemClick Listview

Я пытаюсь получить значение выбранного элемента в пользовательском адаптере в listview. Я пробую это со следующим кодом:

public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    View curr = parent.getChildAt((int) id);
                    TextView c = (TextView)curr.findViewById(R.id.tvPopUpItem);
                    String playerChanged = c.getText().toString();

                    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show();

                }

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

4b9b3361

Ответ 1

Параметр v - это текущая строка. поэтому используйте:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    TextView c = (TextView) v.findViewById(R.id.tvPopUpItem);
    String playerChanged = c.getText().toString();

    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show();
}

(Или вы можете использовать getChildAt(position), но это будет медленнее.)

Поймите, что вы сможете упростить это в зависимости от вашего макета.

Ответ 2

Требуется только небольшое изменение

TextView c = (TextView) v.findViewById(R.id.tvPopUpItem);

Поскольку вы используете настраиваемое представление, вам необходимо передать аргумент View в свой OnItemClickListener, тогда вам нужно использовать это значение, чтобы получить информацию о TextViews, присутствующую в этом

Ответ 3

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent i=new Intent(ListOfAstrologers.this,AstroProForUser.class);
                i.putExtra("hello",adapter.getItem(position).getUsername() );
                startActivity(i);
            }
        });

Здесь имя пользователя - это строковое поле, объявленное в классе, и вы должны преодолеть метод getItem() в классе адаптера, чтобы получить информацию о раздутой строке при нажатии.