我有一个 Activity
和 ViewPager
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/