我有一个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都是空指针。它让我发疯。
我做错了什么?
答案 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();
该调用的范围限定为您点击的项目。