我的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}}
有人会建议解决方法吗?
答案 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>