【发布时间】:2015-06-13 11:37:22
【问题描述】:
我在 Android 中面临两个片段问题。
我的 MainActivity 中有一个带有导航抽屉片段的应用。当我单击此导航抽屉上的项目时,会在主活动内的“fragment_placeholder”上加载一个新片段。很简单。
创建 MainActivity 时,我在 fragment_placeholder 中加载“homeFragment”。这个片段有一个带有两个选项卡的 SlidingTabLayout,每个选项卡都加载它对应的片段。这个 Home Fragment 是我的应用程序的“主要”部分。
当我点击导航抽屉中的另一个项目时,主页片段被另一个片段替换,例如,当我点击“我的帐户”时,“我的帐户片段”被加载到 fragment_placeholder。我在导航抽屉中有 3 个项目。
我想将主页片段(以及其中的两个选项卡/片段)保留在后堆栈上,这样我就可以在任何片段(我的帐户、配置等)上导航,当我按下返回按钮时,我'我正在返回首页片段。
我尝试在 MainActivity 的 onCreate 中添加 Home Fragment(在我提交之前),但无法正常工作。如果我按导航抽屉上的“我的帐户”项,然后按返回,应用程序会再次加载“我的帐户”片段,如果再次按返回,应用程序将关闭。另一种情况:如果我按“Home”项,然后按返回,应用程序返回到同一个主片段但没有任何选项卡(它没有加载属于他的两个片段)。
这是我的应用程序:
这是我的代码: 主活动
public class MainActivity extends ActionBarActivity {
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupDrawer();
// Loading home fragment
if (findViewById(R.id.fragment_placeholder) != null) {
if (savedInstanceState != null) {
return;
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
HomeFragment homeFragment = new HomeFragment();
homeFragment.setArguments(getIntent().getExtras());
fragmentTransaction.replace(R.id.fragment_placeholder, homeFragment);
fragmentTransaction.addToBackStack(null); // This is not working properly
fragmentTransaction.commit();
}
}
导航抽屉:itemClicked 方法
@Override
public void itemClicked(View view, int position) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
switch(position)
{
// Home
case 0:
HomeFragment homeFragment = new HomeFragment();
fragmentTransaction.replace(R.id.fragment_placeholder, homeFragment);
break;
// My account
case 1:
MyAccountFragment myAccountFragment = new MyAccountFragment();
fragmentTransaction.replace(R.id.fragment_placeholder, myAccountFragment);
break;
// Config
case 2:
ConfigFragment configFragment = new ConfigFragment();
fragmentTransaction.replace(R.id.fragment_placeholder, configFragment );
break;
}
fragmentTransaction.commit();
mDrawerLayout.closeDrawer(mDrawerListView);
}
谢谢你,对不起我的英语。
【问题讨论】:
标签: android fragment navigation-drawer