从儿童片段更改ViewPager片段
问题描述:
我有一个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
}
}