2017-02-24 70 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關鍵字。