Выберите текстовое представление из выбранного элемента списка

Это мой код:

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

и приведите его к правильному типу.

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