获取片段名称或ID

时间:2017-02-24 13:03:06

标签: android android-fragments android-framelayout id

我在framelayout中有一次Activity,在其他Fragment中有不同的时间(通过framelayout的同一Activity

在我的MainActivity.class中,我需要知道我framelayout的片段是什么。 例如,我需要知道framelayout是使用MyFragment1.class还是MyFragment2.class

我需要这样的东西(在这个例子中,log必须说我“你在MyFragment1”):

FrameLayout frameLayout = (FrameLayout) findViewById(R.id.framelayout);

 getSupportFragmentManager().beginTransaction()
        .replace(R.id.framelayout,new MyFragment1())
        .commit();

if (framelayout.getname.equals("package.MyFragment1.class"))
 Log.d("debug", "you are in MyFragment1");
else if (framelayout.getname.equals("package.MyFragment2.class"))
 Log.d("debug", "you are in MyFragment2");

但我不知道如何做到这一点。

6 个答案:

答案 0 :(得分:4)

您需要使用以下代码从FrameLayout获取运行时片段

    Fragment fragmentInFrame = (Fragemnt)getSupportFragmentManager()
                                             .findFragmentById(R.id.frag2_view);

然后您使用instanceof

检查片段类型
if (fragmentInFrame instanceof MyFragment1){

   Log.d("debug", "you are in MyFragment1");

}else if (fragmentInFrame instanceof MyFragment2){

    Log.d("debug", "you are in MyFragment2");

}

答案 1 :(得分:1)

final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);

getSupportFragmentManager().beginTransaction()
     .replace(R.id.framelayout, new MyFragment1())
     .commit();

您正在此处替换片段。所以fragmentInFrame仍将引用旧片段。

因此,在替换后,您需要通过再次查找来更新fragmentInFrame变量。

fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);

现在检查fragmentInFrame即可。

请勿忘记删除final关键字。

答案 2 :(得分:1)

我有一个ContentFrameLayout这个ID是Fragment_Main

您可以使用FrameLayout

Activity编写此代码

final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.Fragment_Main);

if(fragmentInFrame instanceof YourFragment){

}

Fragment编写此代码

final Fragment fragmentInFrame =getActivity().getSupportFragmentManager().findFragmentById(R.id.Fragment_Main);

if(fragmentInFrame instanceof YourFragment){

}

答案 3 :(得分:0)

在每个Fragment类中,只需在onCreateView方法中定义Log。

答案 4 :(得分:0)

您需要使用

等实例进行检查

您需要检查片段对象:

 public Fragment getVisibleFragment(){
   FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
   List<Fragment> fragments = fragmentManager.getFragments();
   if(fragments != null){
    for(Fragment fragment : fragments){
        if(fragment != null && fragment.isVisible())
            return fragment;
    }
   }
   return null;
 }

fragment = getVisibleFragment();
if (fragment instance of MyFragment1){

}

答案 5 :(得分:0)

我找到了解决方案

getSupportFragmentManager().beginTransaction()
     .replace(R.id.framelayout,new MyFragment1())
     .commit();

final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);

if (fragmentInFrame instanceof MyFragment1){
      Log.d("debug", "you are in MyFragment1");
} else if (fragmentInFrame instanceof MyFragment2) {
      Log.d("debug", "you are in MyFragment2");
}