【问题标题】:Send data to fragment from Activity从 Activity 向 Fragment 发送数据
【发布时间】:2014-12-09 06:43:42
【问题描述】:

我有 Main Activity 和该 Activity 中的 View Pager。所以,我还有 FragmentStatePager 适配器来处理哪个 fragment 在 ViewPager 中显示。

无论如何,如您所知,ViewPager 会在内存中加载上一个、当前和下一个片段,这是有问题的,因为我想根据当前片段的用户交互从当前片段更改下一个片段中的内容值。

public class StageOneActivity extends FragmentActivity 

  @Override
  protected void onCreate(Bundle savedInstanceState) {

    setContentView(R.layout.activity_stage_one);

    //ViewPager for Introduction
    mStageOnePager = (ViewPager) findViewById(R.id.vp_stage_one);
    mStageOnePager.setAdapter(new IntroFragmentPagerAdapter(getSupportFragmentManager()));
    mStageOnePager.setOffscreenPageLimit(1);
    //mStageOnePager.setCurrentItem(8);
}

 private class IntroFragmentPagerAdapter extends FragmentStatePagerAdapter {

    public IntroFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int pos) {
        switch(pos) {

            case 0:
                return StageOneFragment.newInstance(getResources().getColor(R.color.green), R.drawable.stage1_01);
            case 1:
                return StageOneFragment.newInstance(getResources().getColor(R.color.green), R.drawable.stage1_02);
            case 2:
                return TitleSpinnerFragment.newInstance(getResources().getColor(R.color.green), R.drawable.stage1_03, R.drawable.bkg_page_1_50);
            case 3:
                return CurrencySpinnerFragment.newInstance(getResources().getColor(R.color.green), R.drawable.stage1_03, R.drawable.pack_of_20);
            case 4:
                return SimpleSpinnerFragment.newInstance(getResources().getColor(R.color.green), R.drawable.stage1_05, R.drawable.bkg_page_1_50);
            case 5:
                return MoneySpentFragment.newInstance(getResources().getColor(R.color.green), R.drawable.money_spent_1, R.drawable.money_spent_2, "0");
            case 6:
                return StageOneFragment.newInstance(getResources().getColor(R.color.green), R.drawable.stage1_07);

如何将数据发送到已加载并在 ViewPager 中添加内容的片段?

我决定尝试使用 ViewPager.setOnPageChangeListener 并检测到用户何时滚动到选定的屏幕,但问题是我如何将该数据发送到该 Fragment 并显示它?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    你可以使用事件总线:

    https://github.com/greenrobot/EventBus

    易于设置和使用。

    HOWTO 示例和代码 sn-ps:

    https://github.com/greenrobot/EventBus/blob/master/HOWTO.md

    【讨论】:

    • 有没有更常见或官方的方法来做到这一点?
    • @buendiadas 提出了一个好的建议。但是 eventbus 被广泛使用是因为它快速且方便。
    • 我尝试了 Event Bus,它运行良好。谢谢。
    【解决方案2】:

    您需要在片段中定义一个接口并在 Activity.Google 文档中实现它:

    http://developer.android.com/training/basics/fragments/communicating.html

    在你的课堂上应该是这样的:

    公共片段 StageOneFragment{

    公共接口 itf{

    }

    ... }

    公共类 StageOneActivity 扩展 FragmentActivity 实现 StageOneFragment.itf{ ... }

    希望它有所帮助,您应该能够以这种方式实现接口。

    【讨论】:

    • 我已经尝试过了,但我收到错误,即活动无法转换该接口。你能举个例子吗?
    • 你改变了什么?
    • 我现在看到了您的更新答案,但我认为这不太好。如果您尝试在活动中转换界面,我认为您会收到转换错误。 StageOneFragment.itf 监听器 = (StageOneFragment.itf) getActivity;
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2015-01-14
    • 2013-09-27
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多