Hey StackOverFlow社区!我真的需要帮助...... :(
我现在正在搜索2或3个小时,但没有发现任何相关和简单的内容。
我解释了上下文: 我有一个活动A1。该活性包含3个片段F1,F2,F3。它使用ViewPager,因此通过选择一个选项卡或通过滑动屏幕来选择3个片段,这是有效的。
我现在想做什么: 出于某些原因,我将Web服务称为活动中的数据。数据取决于活动A1从原始调用活动A0获取的意图(它是group_id)。所以,我想把我在Web服务中获得的数据发送到我的每个片段F1,F2和F3。
您是否有解决方案或解释如何在ViewPager中将数据传递给片段?
非常感谢!
我的活动A1有基本代码:
public class ShowGroupActivity extends FragmentActivity implements ActionBar.TabListener { private ViewPager viewPager; private TabsPagerAdapter mAdapter; private ActionBar actionBar; // Tab titles private String[] tabs = { "Infos", "Parcours", "Mur" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.activity_show_group); // Initilization viewPager = (ViewPager) findViewById(R.id.pager); actionBar = getActionBar(); mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(mAdapter); actionBar.setHomeButtonEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Adding Tabs for (String tab_name : tabs) { actionBar.addTab(actionBar.newTab().setText(tab_name) .setTabListener(this)); } viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { // on changing the page // make respected tab selected actionBar.setSelectedNavigationItem(position); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { // on tab selected // show respected fragment view viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { }
以下是片段的示例:F1(我想在其中显示A1给出的一些数据)。
public class GroupInfoFragment extends Fragment { public GroupInfoFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_group_info, container, false); return v; } }
答案 0 :(得分:1)
最简单快捷的方法是使用EventBus。 只需在活动中的 onResponse 方法发布事件,片段就可以处理其余事件。
<强>活动 - 强>
<强>片段强> -
答案 1 :(得分:1)
您应该使用片段中的getActivity()
方法。
我建议在片段中声明一个接口,如下所示:
public class GroupInfoFragment extends Fragment {
...
public interface Callbacks {
// you should declare methods for returning the data you want form your activity here
Foo getData();
}
...
}
然后在ShowGroupActivity
课程中实现此界面,如下所示:
public class ShowGroupActivity extends FragmentActivity implements
ActionBar.TabListener, GroupInfoFragment.Callbacks {
...
@Override
Foo getData() {
return mData;
}
...
}
然后,您可以通过调用:
从片段类中获取所需的数据GroupInfoFragment.Callbacks callbacks = (GroupInfoFragment.Callbacks) getActivity();
Foo data = callbacks.getData;
通过这样做,您可以实现您的片段类,而无需担心活动实现。
附加说明
您还可以覆盖片段的onAttach()
方法,这样您就可以始终保证您的片段被附加到实现Callback
接口的活动。您还可以保留对Callback
实例的引用:
Callbacks mCallbacks;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!(activity instanceof Callbacks)) {
throw new ClassCastException("Activity must implement fragment's callbacks.");
}
mCallbacks = (Callbacks) activity;
}