【问题标题】:Custom dialog in fragment片段中的自定义对话框
【发布时间】:2017-07-16 19:36:37
【问题描述】:

我的应用中有一个扩展 ListFragment 的类。我想在长按列表项时显示一个带有“编辑”和“删除”选项(作为文本视图)的简单对话框。不幸的是,我的对话框在实例化 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 结果为空。 我不知道为什么。我显然错过了一些东西。 你能帮我理解这个问题的原因吗?非常感谢!

【问题讨论】:

    标签: android android-fragments dialog


    【解决方案1】:

    R.id.editR.id.delete 不是片段的一部分在对话框中,因此您应该从对话框布局中获取它,而不是从 getView() 获取编辑和删除视图,

    你可以试试这个。

    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();
    };
    

    【讨论】:

    • 谢谢,但我试过了,但我一直遇到同样的异常。
    • 你改成这样了,TextView edit = (TextView) view.findViewById(R.id.edit); 你改成查看和检查的不是getView..?
    • 解决了!另一个问题是(如果有人像我一样遇到麻烦)名为 layout-v21 资源的应用程序,我忘记用 textviews 更新它。一旦解决了这个问题,你建议我的代码就可以完美运行。谢谢@Muthukrishnan !!!!
    猜你喜欢
    • 2014-04-08
    • 2017-02-16
    • 1970-01-01
    • 2016-05-21
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多