0

我已经实现了按下后退按钮时显示的是/否对话框。如果用户单击“是的,我想离开”,应用程序将关闭。在我的模拟器中一切正常,但是当我在手机上安装应用程序时,点击“是”时,应用程序会后退一步/操作,只有在完成我在其中所做的所有更改时才会关闭。它只发生在我的 Galaxy s4 上,最有趣的是,当我一个月前在同一部手机上安装该应用程序时,我没有遇到同样的问题。无论如何,这是yes no对话的代码:

public class YesNoDialog extends DialogFragment {

    Button btnYes, btnNo;
    static String dialogTitle;

    public interface YesNoDialogListener {
        void onFinishYesNoDialog(boolean state);
    }

    public YesNoDialog(){

    }


    public void setDialogTitle(String title){
        dialogTitle = title;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_yes_no_dialog, container, false);

        btnYes = (Button) view.findViewById(R.id.btnYes);
        btnNo = (Button) view.findViewById(R.id.btnNo);

        getDialog().setTitle(dialogTitle);

        btnYes.setOnClickListener(btnListener);
        btnNo.setOnClickListener(btnListener);

        return view;
    }

    private View.OnClickListener btnListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            YesNoDialogListener activity = (YesNoDialogListener) getActivity();

            String state = ((Button) v).getText().toString();
            if (state.equals("Yes")) {
                activity.onFinishYesNoDialog(true);
            } else {
                dismiss();
            }

        }
    };

}

并在MainActivity

 @Override
public void onFinishYesNoDialog(boolean state) {
    if (state){
        super.finish();
    }
}


private void showYesNoDialog() {
    YesNoDialog yesNo = new YesNoDialog();
    yesNo.setDialogTitle("Leaving Project Planner");
    yesNo.show(mFragmentManager, "yes/no dialog");
}

public void onBackPressed() {
    showYesNoDialog();
}
4

1 回答 1

2

它应该是

state.equalsIgnorecase("Yes")

并调用finish()而不是超级调用。

如果您不介意,我想建议您进行更多更改:)

不要在内部比较字符串,ViewClick interface而是可以比较 id。

private View.OnClickListener btnListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch v.getId():
            case R.id.btnYes:
                dismiss();
                callback.onFinishYesNoDialog();
            break;
            case R.id.btnNo:
                dismiss();
            break;
        }
}

您可以创建一个静态方法,而不是setDialogTitle()创建一个返回对话框实例的静态方法,并初始化对话框的参数。

像这样的东西:

private String dialogTitle;
private YesNoDialogListener callback;

public static YesNoDialog newInstance(String title, YesNoDialogListener callback){
    YesNoDialog d = new YesNoDialog();
    d.dialogTitle = title;
    d.callback = callback;
    return d;
}

在您MainActivity初始化对话框时:

YesNoDialog d = YesNoDialog.newInstance("My title...", this);
d.show(mFragmentManager, "yes/no dialog");

最后你callbackMainActivity意志看起来像这样:

@Override
public void onFinishYesNoDialog() {
     finish();
}
于 2015-08-22T18:05:47.067 回答