Получить значение элемента в OnItemClick 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();

                }

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

4 ответа

Решение

Параметр 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) но это будет медленнее.)

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

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);
            }
        });

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

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

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

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

У меня нет большого опыта, но я думаю, что если вы хотите передать переменную из OnClick (который является анонимным классом) за пределы onClick и в другую активность, вы хотите передать ее через Intent.intent.putExtra... (это довольно просто) В противном случае вы можете использовать переменную "public static", которая может быть утечкой памяти...

Другие вопросы по тегам