0

我有一个 ListView,其中包含每个项目的一些文本和图片(实际上是行)。当我单击其中一个时,它会触发一个侦听器并打开一个对话框。

Dialog 中显示的内容是从 ListView 中的项目中检索的。我尝试了几种方法,但传入的参数都是空指针。

说,我正在尝试获取 listview 布局中的 hotelName 的值。该 TextView 的 id 是 R.id.nameTV

final Context context = this;

public void onCreate(Bundle blabla){

    final ListView listView = getListView();
    listView.setTextFilterEnabled(true);

    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            final Dialog dialog = new Dialog(context);

            // this is the TextView in Dialog to hold the content from ListView
            TextView dHotelTV = (TextView)findViewById(R.id.hotelNameTV);

            CharSequence hotelName;
            /* 
                The way I tried:
                hotelName = context.getText(R.id.nameTV);
                hotelName = view.findViewById(R.id.nameTV); 

            */

            dialog.setTitle("EasyTrip");
            dialog.setContentView(R.layout.dialog);
            dHotelTV.setText(hotelName)

     }
}

这些方法中的hotelName 都是空指针。它让我疯狂。

我究竟做错了什么?

4

1 回答 1

1

从 textView 中拉出来:

hotelName = ((TextView) view.findViewById(R.id.my_important_textview)).getText();

此外,如果 dHotelTV 是对话框中的一个元素,您将不会findViewById在 Activity 中找到它,并且您会得到另一个 NullPointerException:

 dialog.setContentView(R.layout.dialog);
 TextView dHotelTV = (TextView)dialog.findViewById(R.id.hotelNameTV);

请注意,它findViewById()是作用域的——它只寻找孩子。因此,如果您有一个 listView ,其中每个 Item 都由此布局定义:

<LinearLayout
  ...
>
  <TextView
    ...
    android:id="@+id/my_important_textView" />
  <TextView
    ...
    android:id="@+id/other_textview" />
</ LinearLayout>

那么如果你调用findViewById()那个项目:

((TextView) view.findViewById(R.id.my_important_textview)).getText();

调用的范围仅限于您单击的项目。

于 2012-04-22T18:16:56.653 回答