我有一个导航抽屉设置,在菜单项上单击将使用菜单中选择的新片段替换片段容器:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
switch (id) {
case R.id.nav_new:
if (subInfo.isEmpty()){
addFragment(new NewFragment(), id);
} else {
addFragment(new SubjectInfoFragment(), id);
}
break;
case R.id.nav_start:
addFragment(new StartFragment(), id);
break;
case R.id.nav_save:
addFragment(new SaveFragment(), id);
break;
case R.id.nav_raw:
addFragment(new RawFragment(), id);
break;
case R.id.nav_accelerometer:
addFragment(new AccelerometerFragment(), id);
break;
case R.id.nav_accelerometerWorld:
addFragment(new AccelerometerWorldFragment(), id);
break;
case R.id.nav_gyroscope:
addFragment(new GyroscopeFragment(), id);
break;
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
添加片段的方法:
public void addFragment(Fragment fragment, int id) {
if (fragment != null) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (fragmentManager.getFragments() == null) {
fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName())
.commit();
} else {
fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName())
.addToBackStack(Integer.toString(id))
.commit();
}
}
}
在我的一个片段(NewFragment()
)中有一个数据插入表单,该菜单项的ID为nav_new
。单击提交按钮后,将调用addFragment
方法将用户定向到我的应用中的另一个片段(StartFragment()
):
mainActivity.addFragment(new StartFragment(), R.id.nav_new);
但是,上面会将数据插入表单添加到Backstack中。用户提交表单后,我不希望他们能够返回以返回提交表单。相反,我想将它们引导到另一个片段(SubjectInfoFragment()
),其中包含他们输入的信息摘要
我设计了onNavigationItemSelected
方法来支持这一点。单击nav_new
菜单项时,它会检查用户是否已输入任何信息。如果他们没有,则会发生交易,将他们带到NewFragment
以输入表单信息。如果有,则会显示SubjectInfoFragment
,以显示其先前输入的信息的摘要
我必须在表单提交时将它们指向StartFragment
,然后将旧表单片段添加到backstack中,这是不可取的
表单提交后,如何处理片段事务,以便后退按钮将它们带到一个全新的片段(SubjectInfoFragment
)而不是将它们带回到表单提交页面?
或者在最糟糕的情况下,如果我无法在backstack中添加一个全新的片段,我怎么能至少阻止用户回到表单提交页面?
答案 0 :(得分:0)
您应该使用以下行将片段添加到backstack:
getFragmentManager.addToBackStack(tag or null);