0

各アイテムのテキストと写真を含むListViewがあります(実際には行です)。それらの1つをクリックすると、リスナーがトリガーされ、ダイアログが開きます。

Dialogに表示されるコンテンツは、ListViewのアイテムから取得されます。いくつかの方法を試しましたが、渡されるパラメーターはすべてnullポインターです。

たとえば、リストビューのレイアウトにある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はすべてnullポインターです。それは私を夢中にさせます。

私は何が間違っているのですか?

4

1 に答える 1

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 がある場合:

<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 に答える