我正在创建自定义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;
这是我在java.lang.NullPointerException
上获得infoDetail.setMovementMethod(LinkMovementMethod.getInstance());
。
如果我删除此行,我的自定义布局会按预期显示,但网址不可点击。
我做错了什么?
答案 0 :(得分:0)
在对话框中使用小部件时,应使用对话框名称(如
)引用它TextView nameTextView = (TextView) your_dialog_name.findViewById(R.id.textviewid);
或者它们将显示空指针异常,所以
引用TextView,如
TextView infoDetail = (TextView) about.findViewById(R.id.infoDetailText);
答案 1 :(得分:0)
你试过吗
TextView textview = (TextView) getView().findViewById(R.id.textview);
藏汉?
答案 2 :(得分:0)
替换
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()
,而不是在您的活动上调用setMovementMethod
。活动层次结构中不存在具有指定标识的视图,并返回null。尝试在null上调用方法({{1}})会导致NPE。
(是的,我知道,旧问题但得到了random-bumped as unanswered by Community并且很容易回答。)