我的应用包含一个空活动和几个片段。活动的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();
}
}
这是可以接受的吗?它会在活动工作流程中产生任何问题吗?是否有更好/标准的方法来处理这种情况?
答案 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);
}
}