Выберите текстовое представление из выбранного элемента списка
Это мой код:
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
View vie = (View)parent.getParent();
TextView tv = (TextView) vie.findViewById(R.id.tv_id);
String genus = (String) tv.getText();
Toast.makeText(getBaseContext(), genus+"--"+id, Toast.LENGTH_SHORT).show();
}
});
return adapter;
}
Каждый раз он возвращает одно и то же значение для каждого элемента. Вот мои пункты списка:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tv_country"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="20dp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_flag"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_below="@id/tv_country"
android:layout_centerVertical="true"
android:padding="5dp"
/>
<TextView
android:id="@+id/tv_country_details"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_flag"
android:layout_below="@id/tv_country" />
<TextView
android:id="@+id/tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_country_details"
/>
</RelativeLayout>
Вот мой файл просмотра.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lv_countries"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".NearbyGymList" />
<Button android:id="@+id/btnNoResults"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/lv_countries"
android:text="No More Results"/>
</RelativeLayout>
Как можно решить эту проблему?
4 ответа
Решение
Вы не добавляете ссылку на ваши другие TextViews. Сделай это так:
Удалить эту строку
View vie = (View)parent.getParent();
поэтому ваш код станет:
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
TextView tv1 = (TextView) view.findViewById(R.id.tv_id);
TextView tv2 = (TextView) view.findViewById(R.id.tv_country_details);
String genus = (String) tv1.getText().toString();
String genus2 = (String) tv2.getText().toString();
Toast.makeText(getBaseContext(),genus+"--"+id+" "+genus2 , Toast.LENGTH_SHORT).show();
}
});
return adapter;
}
Удалить эту строку:
View vie = (View)parent.getParent();
И измените, чтобы использовать представление из параметра, потому что это вид элемента, который нажимается:
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
//Remove this line: View vie = (View)parent.getParent();
//Use view because it is the view of item which is clicked.
TextView tv1 = (TextView) view.findViewById(R.id.tv_id);
//Add this
TextView tv2 = (TextView) view.findViewById(R.id.tv_country_details);
String genus = (String) tv1.getText().toString();
String genus2 = (String) tv2.getText().toString();
Toast.makeText(getBaseContext(),genus+"--"+id+" "+genus2 , Toast.LENGTH_SHORT).show();
}
});
return adapter;
}
В классе адаптера
public View getView(final int position, View convertView,
ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.yourlayout, parent, false);
TextView textView = (TextView) row.findViewById(R.id.textView);
textView .setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Do whatever you want
});
Для доступа к элементу в наборе данных в позиции вы можете использовать
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Object object = parent.getItemAtPosition(position);
и приведите его к правильному типу.