我有一個ViewPager使用TabLayout與幾個片段。我想單擊其中一個ViewPager片段的按鈕,並使用該選項卡名稱將用戶導向另一個選項卡/片段。從兒童片段更改ViewPager片段
當單擊按鈕時,我希望TabLayout更改以及顯示與該選項卡關聯的片段。我還需要發送附加數據以顯示新片段的請求。
我無權訪問ViewPager setCurrentItem(int index)。理想情況下,我想與父母溝通以完成請求。
我有一個ViewPager使用TabLayout與幾個片段。我想單擊其中一個ViewPager片段的按鈕,並使用該選項卡名稱將用戶導向另一個選項卡/片段。從兒童片段更改ViewPager片段
當單擊按鈕時,我希望TabLayout更改以及顯示與該選項卡關聯的片段。我還需要發送附加數據以顯示新片段的請求。
我無權訪問ViewPager setCurrentItem(int index)。理想情況下,我想與父母溝通以完成請求。
你應該寫一:從你的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();
我希望這有助於!
使用EventBus框架實現此目的的最簡單方法!
如何實現(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
}
}