自定义android对话框中Button的onClickListener

时间:2015-08-21 06:14:19

标签: android 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");
            }
        });

3 个答案:

答案 0 :(得分:1)

您应该使用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();
}

答案 1 :(得分:1)

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

当您按Button Dialog时,您的代码将无法执行。

这样做

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

答案 2 :(得分:-1)

尝试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");
            }
        });