我希望我的活动(显示对话)在用户点击对话框的正面按钮时完成。这可能吗。我在哪里放置finish()?
调用对话的代码:
if(name.equals("")) {
DialogFragment newFragment = new NouserFragment();
newFragment.show(getFragmentManager(), "makeprofile"); }
对话代码:
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.nouseralert)
.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(getActivity(), Editprofile.class);
startActivityForResult(intent, 0);
}
})
.setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
答案 0 :(得分:3)
好。通过将getActivity().finish()
放在onClick()
对话界面下,我能够完成活动。
答案 1 :(得分:1)
您可以使用此代码:
public void showMessageAlert(){
runOnUiThread(new Runnable() {
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(HomeScreen.this);
builder.setTitle(ConfigClass.ALERT_TITLE);
builder.setMessage(ConfigClass.MSG_ALERT);
builder.setCancelable(true);
builder.setInverseBackgroundForced(true);
builder.setPositiveButton("I Accept", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
ActivityName.this.finish();
}
});
builder.setNegativeButton("I decline", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
//Do nothing
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
}
答案 2 :(得分:0)
点击对话框电话dialog.dismiss();
的正面按钮,然后点击finish();
答案 3 :(得分:0)
这是内部类可见性/范围的Java问题。在侦听器内部,this
引用OnClickListener
对象,并且(幸运的是)它没有finish()
方法。要让它参考活动,可以:
finish()
,不带任何前缀。这样,Java将查找最近的封闭对象,该对象定义了一个名为finish()
的方法,它将找到Activity的一个YouActivity.this.finish()
来引用封闭活动实例而没有任何歧义(如果监听器是YourActivity
mActivity.finish()
(也许您必须投射Context
个对象)通常,侦听器被定义为活动内部的匿名内部类,因此调用finish()前缀应该是足够的,但是如果存在名称冲突,则可能需要使用A.this.finish()
表单