【问题标题】:Closing an app after OK button in a Dialog is clicked单击对话框中的确定按钮后关闭应用程序
【发布时间】:2015-04-13 09:07:20
【问题描述】:

我有自定义对话框,我希望在用户单击“确定”按钮时关闭应用程序。我该怎么做?

public class PromptDialog extends Dialog {
    TextView removeMsg;
    public PromptDialog(Context context){
        super(context);
        setContentView(R.layout.dlg_prompt);
        removeMsg = (TextView)findViewById(R.id.confirmText);
        Button okBut = (Button)findViewById(R.id.confirmBut);
        okBut.setOnClickListener(okButClick);
    }
    View.OnClickListener okButClick = new View.OnClickListener() {
        public void onClick(View v) {
        dismiss();
        }
    };
}

【问题讨论】:

  • 请添加显示此对话框的代码。
  • 您可以使用System.exit(0); 或yourMainActivity.finish();,但是,不建议您以编程方式终止您的应用程序。

标签: android dialog


【解决方案1】:

您可以获取调用此对话框的活动并完成它,而不是关闭对话框。

View.OnClickListener okButClick = new View.OnClickListener() {
        public void onClick(View v) {
        getActivity().finish();
        }
    };

【讨论】:

  • 是的,很糟糕。但它回答了OP问题。当用户在某些活动上按下后退按钮时,OP 想要的可能是确认对话框
  • 我似乎无法从我的对话框中调用 getActivity()。方法未定义。
【解决方案2】:

假设你有这样的活动:

public class MainActivity extends ActionBarActivity implements PromptDialog.CommunicationWithActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


PromptDialog promptDialog = new PromptDialog(this/*your context*/, this/*Your communication interface*/);
        promptDialog.show(); // call your dialog and pass interface to it
        }

    public void finishActivity() {
        this.finish();
    }
}

在 Dialog 类中:

public class PromptDialog extends Dialog {
    TextView removeMsg;

    private CommunicationWithActivity mCallBack;

    public interface CommunicationWithActivity {
        public void finishActivity();
    }

    public PromptDialog(Context context, CommunicationWithActivity mCallBack){
        super(context);
        this.mCallBack = mCallBack;
        setContentView(R.layout.dlg_prompt);
        removeMsg = (TextView)findViewById(R.id.confirmText);
        Button okBut = (Button)findViewById(R.id.confirmBut);
        okBut.setOnClickListener(okButClick);
    }
    View.OnClickListener okButClick = new View.OnClickListener() {
        public void onClick(View v) {
            mCallBack.finishActivity();
            dismiss();
        }
    };
}

【讨论】:

  • 那我该如何调用 PromptDialog 呢?调用者函数的 CommunicationWithActivity 参数是什么?
  • 请发布您的自定义布局,以便我可以运行示例。
  • 我认为我没有自定义对话框布局。该对话框已在我的原始帖子中定义。当我想调用它时,我只需使用最终的 PromptDialog 实例化它 promptDialog = new PromptDialog(context); promptDialog.show();然后是 promptDialog.show();
  • 发布此文件 dlg_prompt.xml
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2021-11-26
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多