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

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

Solutions Collecting From Web of "Получить значение элемента в OnItemClick Listview"

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

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

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

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

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

 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() в классе адаптера, чтобы получить информацию о раздутой строке при нажатии.