我想做什么
我有一个活动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 :(");
}
}
这仍然导致对话框为空并且无法解除。
答案 0 :(得分:3)
到目前为止,我已经了解了您的问题,主要问题是您在活动A中启动一个对话框,然后转到活动B,当您回到A时,如果那是场景,您的对话框仍然存在,那么在Activity中执行此操作甲
@override
protected void onPause(){
//write code to dismiss dialog
}
每当启动新的Activity时,旧的Activity会转到onPause()(如果没有完成)。