Получить значение элемента в 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();
}
В начале, если я нажимаю, значения хороши, но как только я прокручиваю и я нажимаю на другой элемент, я получаю неправильное значение этого элемента с щелчком... Любая идея, что вызывает это?
Ответы
Ответ 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()
в классе адаптера, чтобы получить информацию о раздутой строке при нажатии.