2017-03-05 96 views
0

我试图实现一个共同的行为(我认为)。我有两个活动: LoginActivityMainActity返回上一个活动阻止回来的初始活动

MainActiviy包含具有3个片段通过它们进行导航的菜单:RequestFragmentDetailFragmentVisualizationFragment

但是,我有我还没有解决的一个问题:

第一个,如果流动是类似于: LoginActivity - >MainActivity - >RequestFragment - >DetailFragment 并且还可以浏览 LoginActivity - >MainActivity - >VisualizationFragment

但是,一旦你登录,从流去除LoginActivity,刚才我使用:

LoginActivity

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    //...some extra code... 

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
//..start the activity 

} 

好,一个好的工作,但在我MainActivity我有问题: MainActivity

@Override 
    public void onBackPressed() { 
     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      getFragmentManager().popBackStack(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

考虑考虑,我在我的MainActivity更换菜单那一个用于我的片段,当MainActivity处于打开状态时,我如何通过关闭应用程序的应用程序导航(这是很自然的),然后返回到之前的显示?

刚才,我的代码不通过片段做与导航什么,那就是采取一切为MainActivity是没有考虑考虑开fragments

回答

0

使用backpressed像下面的代码。如果它遇到最后一个片段,我会显示警告框。

@Override 
    public void onBackPressed() { 
     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      showAlertDialog(Constants.EXIT_APP, Constants.APP_NAME); 
     } else { 
      getFragmentManager().popBackStackImmediate(); 
     } 
    } 

//添加此方法进行导航。

Classname obj = new Classname(); 
showFragment(obj,"FRAGMENT_NAME_IN_STRING",true); 

注:在普通的java文件

public void showFragment(Fragment fragment, String back_stack_name, boolean save_back) { 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     transaction.replace(R.id.container, fragment); 
     if(save_back) { 
      transaction.addToBackStack(back_stack_name); 
     } 
     transaction.commit(); 
    } 

//调用此方法哪里ü需要的片段,该写如果要添加到堆栈中的片段,设置第三个参数为真,否则设置为false。 就像调用类的Intent一样,showFragment用于调用片段。