我的应用程序中有一个扩展 ListFragment 的类。我想在长按列表项时显示一个简单的对话框,其中包含“编辑”和“删除”选项(作为 TextView )。不幸的是,我的对话框在实例化 Textview 时崩溃了。 这是我的代码: 在 MyListFragment 类中:
@Override
public void onActivityCreated(Bundle savedState) {
super.onActivityCreated(savedState);
getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
showDialog();
return true;
}
});
}
protected void showDialog(){
Dialog dialog = new Dialog(getActivity());
dialog.setCancelable(true);
dialog.setContentView(R.layout.dialog);
TextView edit = (TextView) getView().findViewById(R.id.edit);
TextView delete = (TextView) getView().findViewById(R.id.delete);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Do something
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Do something
}
});
dialog.show();
};
dialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/dialog"
android:paddingTop="@dimen/dialog_padding"
android:paddingBottom="@dimen/dialog_padding"
>
<TextView
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_row_height"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textColor="@color/colorPrimaryText"
android:textAlignment="center"
android:textSize="@dimen/text_size"
android:text="@string/edit" />
<TextView
android:id="@+id/delete"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_row_height"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textColor="@color/colorPrimaryText"
android:textAlignment="center"
android:textSize="@dimen/text_size"
android:text="@string/delete" />
</LinearLayout>
logcat 显示 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
事实上,我通过 Log.d 进行了检查,textview 结果为空。
我不知道为什么。我显然错过了一些东西。
你能帮我理解这个问题的原因吗?非常感谢!
最佳答案
R.id.edit
和 R.id.delete
不是 fragment 的一部分在对话框中,所以不是从 getView 获取编辑和删除 View () 你应该从对话框布局中获取它,
你可以试试这个。
protected void showDialog(){
Dialog dialog = new Dialog(getActivity());
dialog.setCancelable(true);
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
dialog.setContentView(view);
TextView edit = (TextView) view.findViewById(R.id.edit);
TextView delete = (TextView) view.findViewById(R.id.delete);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Do something
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Do something
}
});
dialog.show();
};
关于android - fragment 中的自定义对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132619/