Получить значение элемента в 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", которая может быть утечкой памяти...