自定义 android 对话框中 Button 的 onClickListener

onClickListener of Button in custom android dialog

我在 java 中创建一个对话框并在单击按钮时显示它, 在此对话框中我有一个按钮,如何设置此按钮的 OnClickListener? 此代码显示我的对话框:

ImageView iv = (ImageView) view.findViewById(R.id.ivTaskPlus);
        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Dialog d = new Dialog(getActivity());
                d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                d.setContentView(R.layout.task_new_layout);
                d.show();
            }
        });

在 task_new_layout.xml 我有这个按钮:

<Button
            android:id="@+id/btnSaveTask"
            android:layout_marginTop="10sp"
            style="@style/btnSuccess"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/save_task"
            />

我为此按钮创建了一个 onClickListener,但它不起作用而且没有错误!

final View taskView = inflater.inflate(R.layout.task_new_layout, container, false);
        Button btnSaveTask = (Button) taskView.findViewById(R.id.btnSaveTask);
        btnSaveTask.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.e("MGH","clicked");
            }
        });

您应该使用 Dialog.findViewById(); 而不是膨胀视图并再次找到您的按钮。

在您的 ImageView 点击监听器中试试这个

@Override
    public void onClick(View view) {

    Dialog d = new Dialog(getActivity());
    d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    d.setContentView(R.layout.task_new_layout);
    Button btnSaveTask = (Button) d.findViewById(R.id.btnSaveTask);
    btnSaveTask.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.e("MGH", "clicked");
        }
    });
    d.show();
}

试试 setContentView(taskview)

ImageView iv = (ImageView) view.findViewById(R.id.ivTaskPlus);
        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Dialog d = new Dialog(getActivity());
                d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                d.setContentView(taskView);
                d.show();
            }
        });


final View taskView = inflater.inflate(R.layout.task_new_layout, container, false);
        Button btnSaveTask = (Button) taskView.findViewById(R.id.btnSaveTask);
        btnSaveTask.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.e("MGH","clicked");
            }
        });

您正在重新膨胀您的视图,这会创建 Button 的新实例,并且这个新实例不会在任何地方加载。 Dialog 上的 Button 是一个不同的实例,您没有附加任何 OnClickListener

当您在 Dialog 上按 Button 时,您的代码不会被执行。

这样做

@Override
public void onClick(View view) {
    Dialog d = new Dialog(getActivity());
    d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    d.setContentView(R.layout.task_new_layout);
    Button myBtn = (Button) d.findViewById(R.id.btnSaveTask);
    myBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // your code
        }
    });
    d.show();
}