2017-09-06 54 views
0

獲得標籤的父(TabLayout)我有相同的片段2個TabLayouts和他們每個人擁有兩個標籤:如何從TabSelectedListener

TabLayout studentsTab = view.findViewById(R.id.students_tab); 
studentsTab.addTab(studentsTab.newTab().setText("one")); 
studentsTab.addTab(studentsTab.newTab().setText("two")); 
studentsTab.setTag("students"); 

TabLayout teachersTab = view.findViewById(R.id.teachers_tab); 
teachersTab.addTab(teachersTab.newTab().setText("one")); 
teachersTab.addTab(teachersTab.newTab().setText("two")); 
teachersTab.setTag("teachers"); 

,而不是創建兩個setOnTabSelectedListener聽衆我實現TabLayout.OnTabSelectedListener和由:

studentsTab.setOnTabSelectedListener(this); 
teachersTab.setOnTabSelectedListener(this); 

,現在我有這樣的方法:

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
// detect which TabLayout? 
} 

和我想要確定哪個選項卡觸發了選項卡選擇。是學生表演還是教師表演?

我試圖檢查是否tab.getTag()。等於(「學生」),但tab.getTag()爲空。 當我調試應用程序時,我在tab.mParent上有TabLayout,但它不可訪問。

我找不到辦法做到這一點。任何幫助找到父母將不勝感激。

回答

0

在將它們添加到TabLayout之前,您可以設置與選項卡關聯的標籤。如果您將「學生」或「教師」的標籤添加到正確的選項卡,則可以參考onTabSelected()中的信息。

查看文檔:TabLayout專門查看getTag()setTag()

+0

我真的試圖做到這一點之前,我張貼的問題,但getTag是始終爲空。所以我覺得setTag是用於佈局的,getTag是用於標籤本身的。 – user2396640

+0

很確定我以前使用過這種方法,並能看到我添加到選項卡的相關標籤。該文檔還明確指出,setTag函數用於「爲此選項卡提供任意對象以供以後使用」。 @ user2396640 – DMP

0

嘗試設置contentDescription像這樣

for(int i=0; i<studentsTab.getTabCount; i++) { 
    TabLayout.Tab tab = studentsTab.getTabAt(i); 
    tab.setContentDescription("Text"); 
} 

,然後將每個選項卡,在onTabSelected方法得到contentDescription

public void onTabSelected(TabLayout.Tab tab) { 
    tab.getContentDescription(); 
}