2017-02-24 75 views
0

我有一个framelayout在我的Activity调用一次,并在其他Fragment(通过Activity相同的framelayout)调用各种时间。获取片段名称或ID

在我的MainActivity.class中,我需要知道什么片段是我的framelayout。 例如,我需要知道framelayout是否使用MyFragment1.classMyFragment2.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"); 

但我不知道我怎么能做到这一点。

+1

查找到的标记名称的片段经理 –

+0

检查答案我张贴 –

+0

我试试你的解决方案,但它不工作(看我的编辑) –

回答

-1

我找到了解决办法

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"); 
} 
0

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

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){ 

} 
+0

我尝试了类似的解决方案,但它不工作(看看我的编辑) –

+0

你是否首先得到片段对象?然后你需要检查实例... –

+0

是与最终片段fragmentInFrame = getSupportFragmentManager()。findFragmentById(R.id.framelayout); –

1

您需要使用下面的代码从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"); 

} 
+0

我尝试了您的解决方案,但它不起作用(查看我的编辑) –

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关键字。