简体   繁体   English

无法从列表视图中的textview获取文本

[英]Can't get text from a textview in a listview

I have a custom cursor adapter CAdapter having the following lines of code: 我有一个自定义游标适配器CAdapter具有以下代码行:

public class CAdapter extends CursorAdapter {

    public CAdapter(Context context, Cursor c) {
        super(context, c);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        TextView titleTV = (TextView) view.findViewById(R.id.listTitle);
        titleTV.setText("#"+cursor.getString(cursor.getColumnIndex(cursor.getColumnName(1)))+" "+
                cursor.getString(cursor.getColumnIndex(cursor.getColumnName(2)))); 
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View retView = inflater.inflate(R.layout.row_item_layout, parent, false); 
        return retView;
    }

}

row_item_layout.xml file is row_item_layout.xml文件是

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical">

    <TextView
        android:id="@+id/listTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="2dp"
        android:layout_toRightOf="@+id/heartIV"
        android:focusable="false"
        android:gravity="center_vertical"
        android:text="Example application"
        android:textSize="26sp" 
        android:paddingBottom="3dp"/>

    <ImageView
        android:id="@+id/heartIV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/listTitle"
        android:src="@drawable/heart"
        android:paddingRight="5dp" 
        android:paddingLeft="2dp"/>

</RelativeLayout>

The activity FavListActivity displays the list. 活动FavListActivity显示列表。 Its layout file is: 它的布局文件是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.xkcdreader.FavListActivity"
    tools:ignore="MergeRootFrame" >

    <ListView
        android:id="@+id/favL"
        android:layout_width="match_parent"
        android:layout_height="452dp"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/headingTV" >

    </ListView>

    <TextView
        android:id="@+id/headingTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="8dp"
        android:text="Favourites"
        android:textSize="25dp" />

</RelativeLayout>

Following is a section of code from FavListActivity 以下是FavListActivity的一段代码

listView = (ListView) findViewById(R.id.favL);
listView.setOnItemClickListener(new OnItemClickListener() {          
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.d("App", "clicked on item: " + position);
                TextView listTV=(TextView) view.findViewById(R.id.titleTV);
                Log.d("App",listTV.getText().toString());
            }
        });

On running this I get NullPointerException at the line Log.d("App",listTV.getText().toString()); 在运行它时,我在Log.d(“App”,listTV.getText()。toString())行获得NullPointerException; The list does not having any null textview. 该列表没有任何null textview。 I can't figure out the problem. 我无法弄清楚这个问题。 Please help 请帮忙

you should use getItemAtPosition : 你应该使用getItemAtPosition

listView.setOnItemClickListener(new OnItemClickListener() {          
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           Cursor mycursor = (Cursor)parent.getItemAtPosition(position);
        }
    });

and use myCursor to access your data. 并使用myCursor访问您的数据。

There is no TextView in row_item_layou.xml with id titleTV . row_item_layou.xml没有带有titleTV TextView So when you initialize you end up getting NUllPointerException . 因此,当您初始化时,最终会得到NUllPointerException

Change this 改变这个

TextView listTV=(TextView) view.findViewById(R.id.titleTV);

to

TextView listTV=(TextView) view.findViewById(R.id.listTitle);

since you have 既然你有

<TextView
    android:id="@+id/listTitle" // id is listTitle

Although your NPE can be solved as above you are better off using blackbet's answer 虽然您的NPE可以如上解决,但最好使用blackbet的答案

  Cursor mycursor = (Cursor)parent.getItemAtPosition(position);

Then get the String using the mycursor . 然后使用mycursor获取String。

Try this.. 尝试这个..

Your TextView id is listTitle but you have mentioned as titleTV change that and try it. 你的TextView id是listTitle但是你已经提到了titleTV更改并尝试它。

listView.setOnItemClickListener(new OnItemClickListener() {          
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("App", "clicked on item: " + position);
            TextView listTV=(TextView) view.findViewById(R.id.listTitle);
            Log.d("App",listTV.getText().toString());
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM