3

我有一個ViewPager使用TabLayout與幾個片段。我想單擊其中一個ViewPager片段的按鈕,並使用該選項卡名稱將用戶導向另一個選項卡/片段。從兒童片段更改ViewPager片段

當單擊按鈕時,我希望TabLayout更改以及顯示與該選項卡關聯的片段。我還需要發送附加數據以顯示新片段的請求。

我無權訪問ViewPager setCurrentItem(int index)。理想情況下,我想與父母溝通以完成請求。

回答

3

你應該寫一:從你的OnClickListener內幕的片段發佈事件

public void setPagerFragment(int a) 
{ 
    pager.setCurrentItem(a); 
} 

這將設置在ViewPager當前片段以指定的一個:方法在父(含有ViewPager和子片段)像這樣。然後,您可以調用從子片段此方法:

int newFrag = 0; //the number of the new Fragment to show 
ParentActivity parent = (ParentActivity) getActivity(); 
parent.setPagerFragment(newFrag); 

關於與展示的新片段請求發送額外的數據,你可以在家長的另一種方法,在孩子,被稱爲其會在父級中設置一些數據,父級可以在設置新片段時使用這些數據。

例如父:

public void setExtraData(Object data) 
{ 
    dataFromChildFrag = data; 
} 

,並使用此的孩子,像這樣:

String data = "My extra data"; //the number of the new Fragment to show 
ParentActivity parent = (ParentActivity) getActivity(); 
parent.setExtraData(data); 

最後,如果家長其實片段本身,而不是一個活動簡單地說,更換的所有引用:

ParentActivity parent = (ParentActivity) getActivity(); 

到:

ParentFragment parent = (ParentFragment) getParentFragment(); 

我希望這有助於!

0

使用EventBus框架實現此目的的最簡單方法!

我喜歡用EventBus by greenRobot

如何實現(ED):

1)創建一個事件類,滿足您的需求

public class ClickedButtonInsideFragmentEvent { 

    // some data you want to store 

} 

2)準備好你的用戶!在你的情況,這將是其持有的參考選項卡布局的活動:

public class MyTabActivity { 

    public void onCreate(Bundle savedInstanceSate) { 
     // your stuff you do in onCreate 
     eventBus.register(this); 
    } 

    @Subscribe 
    public void onEvent(ClickedButtonInsideFragmentEvent event) { 
     // Do what you want to do 
    } 

} 

3)最後:

public class MyClickableFragment { 

    public void initOnClickListiner(View clickableView) { 
     clickableView.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       ClickedButtonInsideFragmentEvent event = new ClickedButtonInsideFragmentEvent(); 
       // add what you want to your event 
       eventBus.post(event);     
      } 
     )); 
    } 

    @Subscribe 
    public void onEvent(ClickedButtonInsideFragmentEvent event) { 
     // Do what you want to do 
    } 

}