我正在创建一个自定义的AlertDialog,但我得到了一个错误。
在strings.xml上,我定义了如下字符串:
<string name="infoDetail">Test: <a href="http://www.google.com">Google</a></string>我创建了一个自定义布局,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/infoVersionTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:gravity="right|center"
android:text="@string/infoVersion"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/infoVersionTitleValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/infoVersionTitle"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/infoDetailText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/infoVersionTitle"
android:autoLink="web"
android:linksClickable="true"
android:padding="4dp"
android:text="@string/infoDetail" />
</RelativeLayout>这是用我的自定义布局创建AlertDialog的代码:
case R.id.info:
AlertDialog.Builder about = new AlertDialog.Builder(this);
about.setTitle(getString(R.string.app_name));
about.setIcon(R.drawable.info);
about.setView(getLayoutInflater().inflate(R.layout.info, null));
TextView infoDetail = (TextView) findViewById(R.id.infoDetailText);
infoDetail.setMovementMethod(LinkMovementMethod.getInstance());
about.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
about.show();
break;我在infoDetail.setMovementMethod(LinkMovementMethod.getInstance());上得到了一个java.lang.NullPointerException。
如果我删除此行,我的自定义布局将按预期显示,但无法单击url。
我做错了什么?
发布于 2012-08-21 19:49:59
在对话框中使用小部件时,应使用对话框名称引用它,如
TextView nameTextView = (TextView) your_dialog_name.findViewById(R.id.textviewid);否则它们将显示空指针异常,因此
像这样引用TextView
TextView infoDetail = (TextView) about.findViewById(R.id.infoDetailText);发布于 2013-08-15 21:03:42
你试过了吗?
TextView textview = (TextView) getView().findViewById(R.id.textview);也是吗?
发布于 2013-12-18 04:19:35
替换
about.setView(getLayoutInflater().inflate(R.layout.info, null));
TextView infoDetail = (TextView) findViewById(R.id.infoDetailText);使用
View v = getLayoutInflater().inflate(R.layout.info, null);
about.setView(v);
TextView infoDetail = (TextView)v.findViewById(R.id.infoDetailText);因为您需要在对话框的视图层次结构上调用findViewById(),而不是在activity的视图层次结构上调用。具有指定id的视图在activity层次结构中不存在,并返回null。尝试调用null上的方法(setMovementMethod)会导致NPE。
(是的,我知道,这是一个老问题,但我得到了random-bumped as unanswered by Community,而且很容易回答。)
https://stackoverflow.com/questions/12053826
复制相似问题