仅使用片段退出活动

时间:2017-11-10 17:59:56

标签: android android-fragments android-activity

我的应用包含一个空活动和几个片段。活动的onCreate会将activity_main.xml中的空视图替换为包含一些按钮的MainFragment。每个按钮启动一个单独的片段,用户可以从一个片段导航到另一个片段等。

按下后退键,当前片段正确地被前一个片段替换,直到你到达MainFragment。当用户从MainFragment按下时,它会隐藏主片段,您会看到主要活动的白色空白背景。但是我想在此时退出活动,因为这将是明智的行为。

如果片段管理器中没有片段,则可以通过onBackPressed第二次调用super.onBackPressed()来实现此目的。

@Override
public void onBackPressed() {
    super.onBackPressed();
    FragmentManager manager = getSupportFragmentManager();
    List<Fragment> fragments = manager.getFragments();
    if (fragments == null || fragments.size() == 0) {
        Log.d(TAG, "No more fragments: exit");
        super.onBackPressed();
    }
}

这是可以接受的吗?它会在活动工作流程中产生任何问题吗?是否有更好/标准的方法来处理这种情况?

2 个答案:

答案 0 :(得分:1)

这样做没有问题,但是如果将主片段添加到不调用.addToBackStack()的活动中,可能会更容易

答案 1 :(得分:0)

您并不需要在“活动”中覆盖using (var dbContext = new MyDbContext(...)) { Article articleToRemove = ... dbContext.Articles.Remove(articleToRemove); dbContext.SaveChanges(); } 。我建议实现一种在Activity中添加片段的方法:

onBackPressed

并修改您的protected void addFragment(Fragment fragment, boolean addToBackStack) { String tag = fragment.getClass().getName(); //It's optional, may be null FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction() .add(R.id.your_container_id, fragment, tag); if (addToBackStack) { transaction.addToBackStack(tag); } transaction.commit(); } 活动方法,如以下代码段所示:

onCreate

对于所有其他片段,请使用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        // Add your fragment only if it is a first launch, 
        // otherwise it will be restored by system 
        addFragment(new YourFirstFragment(), false);
    }
}