如何从Dialog中获取ListView的值

时间:2012-04-22 18:08:44

标签: android

我有一个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都是空指针。它让我发疯。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

从textView:

中拉出来
hotelName = ((TextView) view.findViewById(R.id.my_important_textview)).getText();

此外,如果dHotelTV是对话框中的一个元素,那么您不会在活动中使用findViewById找到它,并且您将获得另一个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();

该调用的范围限定为您点击的项目。