我有一个显示对话框的方法,里面包含一个textview。所以我试图将该textview设置为tvD.setText("SELECT")
的文本。但由于某种原因,该应用程序给了我NPE。这是我的代码
这是prompts.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tvD"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="PICK"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
这是方法alertDialog
public void alertDialog() {
final Context context = this;
// get prompts.xml view
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.prompts, null);
final TextView tvDialog = (TextView) findViewById(R.id.tvD);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
// set prompts.xml to alertDialog builder
alertDialogBuilder.setView(promptsView);
// set its text
tvDialog.setText("HELLO");
// set dialog message
alertDialogBuilder.setCancelable(false).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
为什么我会得到这个NPE?
答案 0 :(得分:2)
您正在从错误的位置找到TextView,请按以下步骤操作:
// get prompts.xml view
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.prompts, null);
final TextView tvDialog = (TextView) promptsView.findViewById(R.id.tvD);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
您必须使用膨胀的视图来查找正确的对话框的TextView。
答案 1 :(得分:1)
更改为
View promptsView = li.inflate(R.layout.prompts, null);
final TextView tvDialog = (TextView)promptsView.findViewById(R.id.tvD);
TextView
属于夸大的布局。 findViewById
在当前的infalted布局中查找视图。因此,您需要使用view对象初始化TextView
。