Android:避免多次打开对话框,但允许隐藏并显示相同的对话框

时间:2014-07-14 19:33:41

标签: android android-viewpager dialogfragment

我的Activity ViewPager PagerSlidingTabStrip ViewPager fragment fragment http request每个@Override public void show(FragmentManager manager, String tag) { if (manager.findFragmentByTag(tag) == null) { super.show(manager, tag); } } dialog button FragmentManager(使用Volley)从页面加载数据,但是当请求以错误结束时,键入超时或丢失连接,我需要显示一个对话框,其中包含重做调用的选项服务器,解决了每个错误打开多个对话框的问题,请使用以下代码解决:

请在此处查看此解决方案:http://www.jorgecoca.com/android-quick-tip-avoid-opening-multiple-dialogs-when-tapping-an-element/

Activity

当用户点击final Button mButton = ( Button ) this.findViewById( R.id.btn_opendialog ); final DialogFragmentHelper mDialog = new DialogFragmentHelper(); mDialog.setCallbackListener( new OnCallback() { @Override public void onCancel() { } @Override public void onConfirm() { // verify if network available mDialog.show( MainActivity.this.getSupportFragmentManager(), DialogFragmentHelper.DIALOG_TAG ); } } ); mButton.setOnClickListener( new OnClickListener() { @Override public void onClick( final View v ) { mDialog.show( MainActivity.this.getSupportFragmentManager(), DialogFragmentHelper.DIALOG_TAG ); } } ); 再次尝试,并关闭对话框并检查是否有互联网连接时,如果我没有,则应再次打开对话框,但对话框是不再显示,我相信标签没有发布到{{1}}。

{{1}}中的代码:

{{1}}

有人会建议解决方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用单一控制器来接近它。 E.g:

package com.example.stackoverflowsandbox;

public class MyDialogController {
    private static MyDialogController instance;

    public static MyDialogController getInstance() {
        if ( MyDialogController.instance == null ) {
            MyDialogController.instance = new MyDialogController();
        }

        return MyDialogController.instance;
    }

    private boolean dialogOpenned;

    private MyDialogController() {}

    public void closeDialog() {
        if ( this.dialogOpenned ) {
            this.dialogOpenned = false;

            // you close code...
        }
    }

    public void openDialog() {
        if ( !this.dialogOpenned ) {
            this.dialogOpenned = true;

            // your open code...
        }
    }
}

答案 1 :(得分:1)

为了维护我的项目中已准备就绪的结构,并且保持更接近我的目标,即不使用标志,也没有通过第三个对话片段的控制来管理,得到了一个解决方案结果一个小时。

DialogFragmentHelper mDialog = new DialogFragmentHelper();
mDialog.setCallbackListener( new OnCallback() {

    @Override
    public void onCancel() {}

    @Override
    public void onConfirm() {

        mDialog.dismissAllowingStateLoss();

        if(networkAvailable == false){

            new Handler().post( new Runnable() {

                @Override
                public void run() {
                    mDialog.show( MainActivity.this.getSupportFragmentManager(), DialogFragmentHelper.DIALOG_TAG );
                }
            } );

        }else {
            //do something here
        }
    }
} );

这样我保证在发送几个请求以打开dialogfragment时,只执行第一个请求,关闭对话碎片,如果需要,我可以快速再次打开它,就像我正在工作的场景中一样。 / p>