我做了一个导航抽屉,我设置了一些项目,通常当我选择一个项目时,当前片段将被新的更改,但对我来说并非如此,第一个活动仍然显示即使碎片发生变化。这是我的onNavigationDrawerItemSelected
方法,很明显我每次点击一个新片段都会更改片段。
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getSupportFragmentManager();
// TODO : Added
switch(position) {
/*case 0 :
fragmentManager.beginTransaction()
.replace(R.id.container, new ProfilFrgement())
.commit();
break;*/
case 1:
fragmentManager.beginTransaction()
.replace(R.id.container, new SpotFragement())
.commit();
break;
case 2:
fragmentManager.beginTransaction()
.replace(R.id.container, new SessionsFragement())
.commit();
break;
/*case 3:
fragmentManager.beginTransaction()
.replace(R.id.container, new EventsFragment())
.commit();
break;*/
}
}
我认为我的问题是改变始终是同一个容器。所以我需要它获取当前片段ID
答案 0 :(得分:0)
抱歉为时已晚,但我有解决方案来获取片段ID。您可以使用Fragment Class的名称作为标识符而不是ID。使用静态String变量来存储类名。
public class Activity{
...
static String currentFragment = null;
...
...
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_one:
setFragment(new oneFragment());
break;
case R.id.nav_two:
setFragment(new twoFragment());
break;
}
return true;
}
public static void setFragment(@NonNull Fragment f) {
if(!f.getClass().getName().equals(currentFragment)){
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, f);
fragmentTransaction.commit();
currentFragment = f.getClass().getName();
}
...
}
答案 1 :(得分:-1)
这里的当前片段ID是什么? Ur id是R.id.container,只有一个rt?然后是什么问题"我怎样才能得到当前的片段ID"?
如果问题是找到哪个是当前片段显示给用户?如果是,那么
Fragment ft = getSupportFragmentManager().findFragmentById(R.id.container);
if (ft instanceof SpotFragement) {
// navigation drawer item 1 and current fragment is SpotFragment.
} else if (ft instanceof SessionsFragement) {
}
答案 2 :(得分:-1)
确保您的容器样式正确无误。 检查容器的以下值一次 -