我如何获得当前的片段ID

时间:2014-09-24 09:01:36

标签: android fragment

我做了一个导航抽屉,我设置了一些项目,通常当我选择一个项目时,当前片段将被新的更改,但对我来说并非如此,第一个活动仍然显示即使碎片发生变化。这是我的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

3 个答案:

答案 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)

确保您的容器样式正确无误。 检查容器的以下值一次 -

  • 机器人:layout_width
  • 机器人:layout_height