如何从其他活动中解除另一个活动显示的对话框片段?

时间:2015-04-03 17:05:13

标签: android android-fragments

我想做什么

我有一个活动A显示的对话框片段,其中包含一个按钮。按下按钮时,活动B开始。在活动B中,用户执行的任何动作都会导致活动B通过调用finish()结束但是我希望在调用finish()之前从活动B中删除Dialog片段,以便在用户导航回活动A时,此对话框不再显示。

问题

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

代码

对话片段

public class MyDialogFragment extends DialogFragment {

    public static final String TAG = "MyDialogFragment";

    public static MyDialogFragment newInstance(){
        MyDialogFragment myDialogFragment = new MyDialogFragment();
        return myDialogFragment;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.mydialogfragment,container,false);
        Button goToSomeOtherActivity = (Button)view.findViewById(R.id.goToSomeOtherActivity);
        goToSomeOtherActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(),SomeOtherActivity.class);
                startActivity(intent);
            }
        });

        return view;
    }

活动A - 按下按钮

显示对话框片段
public void showDialogFragment(View view)
{
    MyDialogFragment.newInstance().show(getSupportFragmentManager(),MyDialogFragment.TAG);
}

活动B - 此活动试图通过点击按钮关闭活动A中的对话

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

我累了

以下是我试图做的不起作用的内容。我有一个想法,如果使用全局片段管理器来显示片段,这个经理应该能够找到它。

我所做的是创建活动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);

在活动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 :(");
        }
    }

这仍然导致对话框为空并且无法解除。

1 个答案:

答案 0 :(得分:3)

到目前为止,我已经了解了您的问题,主要问题是您在活动A中启动一个对话框,然后转到活动B,当您回到A时,如果那是场景,您的对话框仍然存在,那么在Activity中执行此操作甲

 @override
    protected void onPause(){
//write code to dismiss dialog
    }

每当启动新的Activity时,旧的Activity会转到onPause()(如果没有完成)。