是否可以对AlertDialog和View使用相同的onClick?

时间:2016-01-30 22:02:03

标签: java android onclick

我的活动有一个接受按钮,通过onClickOkayButton方法向父母发送意图。我已经覆盖了onBackPressed()方法,以便它显示一个AlertDialog,询问用户是否真的希望离开,或者如果他想保存首选项,则会执行与接受按钮完全相同的操作。

是否可以将onClick方法合并为一个,这样即使两个方法都使用不同的参数,我也不需要复制/粘贴其中一个,即使两个方法都使用不同的参数?

public void onClickOkayButton(View view) {

// THIS IS THE ACCEPT BUTTON
    EditText editText = (EditText)findViewById(R.id.surveyadd_name_edittext);
    String title = editText.getText().toString();
    if (!(title.matches("")) || !(title.isEmpty()) || !(title.equals("")) ) {
        Intent intent = new Intent();
        intent.putExtra("title", title);
        setResult(RESULT_OK, intent);
        finish();
    } else {
        Toast.makeText(this, R.string.surveyadd_warn_notitle, Toast.LENGTH_SHORT).show();
    }
}

@Override
public void onBackPressed() {
    if (adapter.getCount() != 0) {
        showAlertDialog();
    } else {
        super.onBackPressed();
    }
}

public void showAlertDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage(R.string.surveyadd_warn_back_message);
    builder.setNegativeButton(R.string.surveyadd_warn_back_save, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

// THIS WAS COPIED FROM THE ACCEPT BUTTON
            EditText editText = (EditText)findViewById(R.id.surveyadd_name_edittext);
            String title = editText.getText().toString();
            if (!(title.matches("")) || !(title.isEmpty()) || !(title.equals("")) ) {
                Intent intent = new Intent();
                intent.putExtra("title", title);
                setResult(RESULT_OK, intent);
                finish();
            } else {
                Toast.makeText(context, R.string.surveyadd_warn_notitle, Toast.LENGTH_SHORT).show();
            }
        }
    });
// UP TO HERE

    builder.setPositiveButton(R.string.surveyadd_warn_back_erase, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            finish();
        }
    });

    AlertDialog alertDialog = builder.create();
    alertDialog.show();
}

1 个答案:

答案 0 :(得分:1)

您无法使用相同的回调方法,因为它们来自不同的接口。

你应该做的是将所有常用代码移到第三种方法中,然后从两个点击处理程序中调用它,如下所示:

private void setResultAndFinish() {
    EditText editText = (EditText)findViewById(R.id.surveyadd_name_edittext);
    String title = editText.getText().toString();
    if (!TextUtils.isEmpty(title)) ) {
        Intent intent = new Intent();
        intent.putExtra("title", title);
        setResult(RESULT_OK, intent);
        finish();
    } else {
        Toast.makeText(context, R.string.surveyadd_warn_notitle, Toast.LENGTH_SHORT).show();
    }
}

然后是处理程序:

public void onClickOkayButton(View view) {
    setResultAndFinish();
}

@Override
public void onClick(DialogInterface dialog, int which) {
    setResultAndFinish();
}