Android 如何从另一个活动中消除另一个活动显示的对话框片段?

Android 如何从另一个活动中消除另一个活动显示的对话框片段?,android,android-fragments,Android,Android Fragments,我想做什么 我有一个来自活动a的对话框片段,其中包含一个按钮。按下按钮后,活动B开始。在活动B中,用户所做的任何操作都会导致活动B通过调用finish()结束,但是我希望在调用finish()之前关闭活动B中的对话框片段,以便用户导航回活动a时,不再显示此对话框 问题 正如您在代码部分所看到的,我已经小规模地重新创建了这个问题,以避免发布大量代码并简化问题问题是,我的应用程序包含许多可以显示对话框片段的活动,因此我不知道如何跟踪启动对话框片段的活动。但是我知道另一个活动无法找到从另一个活动添加的

我想做什么

我有一个来自活动a的对话框片段,其中包含一个按钮。按下按钮后,活动B开始。在活动B中,用户所做的任何操作都会导致活动B通过调用finish()结束,但是我希望在调用finish()之前关闭活动B中的对话框片段,以便用户导航回活动a时,不再显示此对话框

问题

正如您在代码部分所看到的,我已经小规模地重新创建了这个问题,以避免发布大量代码并简化问题问题是,我的应用程序包含许多可以显示对话框片段的活动,因此我不知道如何跟踪启动对话框片段的活动。但是我知道另一个活动无法找到从另一个活动添加的片段,因此我想知道是否有人知道如何处理这个问题

代码

对话片段

活动A-按下按钮时显示对话框片段

活动B-此活动尝试通过单击按钮从活动A关闭对话框

我累了什么

下面是我试图做的,但没有成功。我的想法是,如果使用全局片段管理器来显示片段,那么这个管理器应该能够找到它

我所做的是创建一个基本活动,活动a和B从中扩展

public class BaseActivity extends ActionBarActivity {

    private FragmentManager globalFragmentManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        globalFragmentManager = getSupportFragmentManager();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    public FragmentManager getGlobalFragmentManager(){
          return globalFragmentManager;
   }


}
现在,活动A和B使用它来显示并尝试关闭对话框片段

在活动A中

   MyDialogFragment.newInstance().show(getGlobalFragmentManager(),MyDialogFragment.TAG);
 @override
    protected void onPause(){
//write code to dismiss dialog
    }
在活动B中

 public void dismissDialogFragment(View view){
        MyDialogFragment myDialogFragment = (MyDialogFragment)getGlobalFragmentManager().findFragmentByTag(MyDialogFragment.TAG);
        if(myDialogFragment != null)
        {
            Log.d("SomeOtherActivity","Its not null, we got it");
        }
        else{
            Log.d("SomeOtherActivity","it was null :(");
        }
    }

这仍然会导致对话框为空且无法关闭

据我所知,您的问题主要是您在活动a中启动一个对话框,然后转到活动B,当您返回到a时,您的对话框仍然存在。如果是这种情况,请在活动a中执行此操作

   MyDialogFragment.newInstance().show(getGlobalFragmentManager(),MyDialogFragment.TAG);
 @override
    protected void onPause(){
//write code to dismiss dialog
    }

无论何时启动新活动,旧活动都会转到onPause()(如果未完成)。

据我所知,主要问题是您在活动a中启动一个对话框,然后转到活动B,当您返回到活动a时,您的对话框仍然存在如果是这样的情况,请在活动a中执行此操作

   MyDialogFragment.newInstance().show(getGlobalFragmentManager(),MyDialogFragment.TAG);
 @override
    protected void onPause(){
//write code to dismiss dialog
    }

无论何时启动新活动,旧活动都会转到onPause()(如果未完成)。

谢谢,这为我指明了正确的方向。我所做的是扩展应用程序类来存储全局变量。活动B完成后,我将布尔值设置为true。当活动B完成时,将调用对话框片段的onResume来检查此Booelan的值。如果是真的,我就打电话辞退。谢谢,这为我指明了正确的方向。我所做的是扩展应用程序类来存储全局变量。活动B完成后,我将布尔值设置为true。当活动B完成时,将调用对话框片段的onResume来检查此Booelan的值。如果是真的,我就打电话解雇。