Android ListView:在不使用点击事件的情况下获取项目文本

时间:2015-08-28 10:33:45

标签: android listview android-listview

有没有办法在不使用任何点击事件的情况下获取TextView的值,这是ListView的一个项目?

<?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"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/friendNoTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <ImageView
        android:id="@+id/friendImage"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" />

    <TextView
        android:id="@+id/friendFullName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/friendImage"
        android:textColor="#0D47A1" />

    <ImageButton
        android:id="@+id/addFriendButton"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="5dp"
        android:background="@drawable/add_friend" />

    <TextView
        android:id="@+id/addFriendTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/addFriendButton"
        android:layout_marginTop="5dp"
        android:text="ADD FRIEND"
        android:textColor="#0D47A1"
        android:textSize="10sp" />

</RelativeLayout>

我自定义的行布局如上定义,我需要获取friendNoTv TextView的值,而不需要任何点击事件。我试了一下

@Override
public View getView(int index, final View convertView, ViewGroup parent) {

    // check if we need to generate a new View from scratch or recycle one
    View InflatedView = convertView;
    if (InflatedView == null) {
        InflatedView = Inflater.inflate(R.layout.find_friends_result_row, parent, false);
    }

    // setup variables

    final TextView friendNo = (TextView) InflatedView.findViewById(R.id.friendNoTv);
    ImageView friendImage = (ImageView) InflatedView.findViewById(R.id.friendImage);
    TextView friendFullName = (TextView) InflatedView.findViewById(R.id.friendFullName);
    ImageButton addFriendButton = (ImageButton) InflatedView.findViewById(R.id.addFriendButton);

    //Exception here, friendNo.getText().toString() comes up NULL
    final int friendId = Integer.parseInt(friendNo.getText().toString());

    if(isFriend(friendId)){
        addFriendButton.setVisibility(View.GONE);
    }else{
        addFriendButton.setVisibility(View.VISIBLE);
    }

    //TODO

    Friend friend = friendList.get(index);

    DataFormatter dataFormatter = new DataFormatter();

    friendNo.setText(Integer.toString(friend.getBorNo()));
    dataFormatter.decodeimage(friend.getUserImage(),friendImage);
    friendFullName.setText(friend.getFullName());

    return InflatedView;

}

但价值出现Null会导致Exception。我该如何解决 ?任何帮助都会受到启发。

3 个答案:

答案 0 :(得分:-1)

删除android:visibility =&#34;去掉&#34;来自

<TextView
    android:id="@+id/friendNoTv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone" />

并在文本视图上方添加文字

例如

android:text="1"

答案 1 :(得分:-1)

您正在获取null,因为您刚刚对视图进行了充气,​​并且您在设置之前尝试获取文本。在您的XML中,您没有设置任何文本值,这就是您在那里什么也得不到的原因。

只需将下面的行替换为null,

&#13;
&#13;
    final int friendId = Integer.parseInt(friendList.get(index).getFriendId.toString());
&#13;
&#13;
&#13;

答案 2 :(得分:-1)

您的代码在这里:

//Exception here, friendNo.getText().toString() comes up NULL
 final int friendId = Integer.parseInt(friendNo.getText().toString());

肯定会为null,因为尚未设置friendNo。你应该在return语句之前使用条件语句粘贴这些行。