如何将数据从 activity 传递到 viewpager 内的 Fragment
How to pass data from activity to Fragment which is inside viewpager
我有一个选项卡 activity,其中包含 3 个选项卡。
我的 activity 中有一个 edittext 和 button,一个 textview 碎片化。
每当我需要更改片段 textview 时,我只需在 edittext 中添加一些文本,然后单击按钮。该文本应出现在片段中。
在这里我无法使用 setArguments.
Otto 的 EventBus 来拯救。
我正好有这种情况要处理。在我的例子中,我需要在带有锁定滑动的 viewpager 中触发片段更改。所以
Gradle:
// EventBus
implementation 'org.greenrobot:eventbus:3.0.0'
制作一个将从 activity 传递到片段
的事件
public class FragmentChangeEvent {
public int fragmentToBeChanged;
//here you can define variables of your choosing, just make sure you're including them into the constructor of the event.
public FragmentChangeEvent(int fragmentToBeChanged) {
this.fragmentToBeChanged = fragmentToBeChanged;
}
}
从activity
触发事件
EventBus.getDefault().post(new FragmentChangeEvent(1));
最后让您的片段知道总线和事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onChangeFragmentEvent(FragmentChangeEvent event) {
//do your work here.
}
}
如果您使用 ViewPager 来呈现片段,请在您的父级中使用此代码 Activity。
if(viewPager.getCurrentItem() == 1) //First fragment
{
FragmentOne frag1 = (FragmentOne)viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem());
frag1.textview.setText(yourText);
}
我有一个选项卡 activity,其中包含 3 个选项卡。
我的 activity 中有一个 edittext 和 button,一个 textview 碎片化。
每当我需要更改片段 textview 时,我只需在 edittext 中添加一些文本,然后单击按钮。该文本应出现在片段中。 在这里我无法使用 setArguments.
Otto 的 EventBus 来拯救。 我正好有这种情况要处理。在我的例子中,我需要在带有锁定滑动的 viewpager 中触发片段更改。所以
Gradle:
// EventBus
implementation 'org.greenrobot:eventbus:3.0.0'
制作一个将从 activity 传递到片段
的事件public class FragmentChangeEvent {
public int fragmentToBeChanged;
//here you can define variables of your choosing, just make sure you're including them into the constructor of the event.
public FragmentChangeEvent(int fragmentToBeChanged) {
this.fragmentToBeChanged = fragmentToBeChanged;
}
}
从activity
触发事件 EventBus.getDefault().post(new FragmentChangeEvent(1));
最后让您的片段知道总线和事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onChangeFragmentEvent(FragmentChangeEvent event) {
//do your work here.
}
}
如果您使用 ViewPager 来呈现片段,请在您的父级中使用此代码 Activity。
if(viewPager.getCurrentItem() == 1) //First fragment
{
FragmentOne frag1 = (FragmentOne)viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem());
frag1.textview.setText(yourText);
}