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

标签 android android-viewpager dialogfragment

我有一个 ActivityViewPager PagerSlidingTabStrip 我的 ViewPager 的每个页面都有一个 fragment ,并在每个 fragment 中实现一个 http 请求(使用 Volley )从页面加载数据,但是当请求以错误结束时,键入超时或失去连接,我需要显示一个对话框,其中包含重做对服务器的调用的选项,防止为每个错误打开多个对话框的问题已通过代码段解决:

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

@Override
public void show(FragmentManager manager, String tag) {
    if (manager.findFragmentByTag(tag) == null) {
      super.show(manager, tag);
    }
}

当用户点击对话框按钮重试时,对话框关闭并检查是否有互联网连接,如果没有,对话框应该再次打开,但是对话框不再显示,我相信标签没有被释放到 FragmentManager

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 );
    }
} );

有人会提出解决方法的建议吗?

最佳答案

为了维护我的项目中的结构,并保持更接近我的目标,即不使用标志,也不传递第三个 dialogfragment 的控制权来管理,得出了一个解决方案结果一个小时。

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,但只有第一个被执行,然后关闭 dialogfragment,如果需要,我可以快速再次打开它,就像我正在工作的场景中发生的那样。

关于Android:避免多次打开对话框,但允许隐藏和显示相同的对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24744407/

相关文章:

android - RelativeLayout 对齐规则在 DialogFragment 中不起作用

android - 如果搜索时标题中没有空格,则只能在 google play 中看到应用

android - 非拉丁语言环境中的 PatternSyntaxException

android - setAlarmClock(信息,pi);作为 setRepeating() 工作

android - 带有查看寻呼机标题条的向上滑动面板

android - getView 的 DialogFragment 在 onDismiss 上返回 null

java - 使用自签名证书的 Android SSLSockets

android - 如何在 Android 中使用 ViewPager 和 NavigationDrawer

android - 滚动选项卡 View 中的 fragment 时调用的确切方法

android - 如何设置 fragment 对话框大小以换行到 ListView