【问题标题】:How to send data from Activity to Fragment with ViewPager2?如何使用 ViewPager2 将数据从 Activity 发送到 Fragment?
【发布时间】:2020-08-02 12:47:12
【问题描述】:

我正在尝试将数据从 MainActivity 发送到使用 ViewPager2 创建的片段之一。

主活动:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    ViewPager2 viewPager = findViewById(R.id.viewPager);
    MainPagerAdapter pagerAdapter = new MainPagerAdapter(this);
    viewPager.setAdapter(pagerAdapter);
}

MainPagerAdapter:

public class MainPagerAdapter extends FragmentStateAdapter
{
    public MainPagerAdapter(@NonNull FragmentActivity fragmentActivity)
    {
        super(fragmentActivity);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position)
    {
        switch (position)
        {
            case 0:
                return new Fragment1();
            case 1:
                return new Fragment2();
            default:
                return new Fragment3();
        }
    }

    @Override
    public int getItemCount()
    {
        return 3;
    }
}

我在 MainActivity 中发送数据:

Fragment1 fragment1 = new Fragment1();

Bundle bundle = new Bundle();
bundle.putInt("1", 1);
fragment1.setArguments(bundle);

并尝试在 Fragment1 中获取它:

Bundle bundle = this.getArguments();
if (bundle != null)
{
    int i = bundle.getInt("1", 0);
    Log.d(Constants.LOG_TAG, "" + i);
}

但它总是带有一个空包,因为片段是在 viewpager 滚动浏览它时创建的。

创建 MainActivity 时如何向 Fragment 发送数据?

【问题讨论】:

    标签: android android-fragments android-viewpager2


    【解决方案1】:

    我的解决方案:

    主活动:

    pagerAdapter = new MainPagerAdapter(this);
    pagerAdapter.setData(fragment1Container);
    

    MainPagerAdapter:

    public class MainPagerAdapter extends FragmentStateAdapter
    {
        private Fragment1Container fragment1Container;
        private Fragment2Container fragment2Container;
    
        public void setData(Fragment1Container container)
        {
            fragment1Container = container;
        }
    
        public void setData(Fragment2Container container)
        {
            fragment2Container = container;
        }
    
        @NonNull
        @Override
        public Fragment createFragment(int position)
        {
            switch (position)
            {
                case 0:
                    Fragment1 fragment1 = new Fragment1();
    
                    Bundle bundle = new Bundle();
                    Gson gson = new Gson();
    
                    bundle.putString("fragment1Container", gson.toJson(fragment1Container));
                    fragment1.setArguments(bundle);
    
                    return fragment1;
                case 1:...
    

    片段1:

    private Fragment1Container fragment1Container;
    
    if (bundle != null)
    {
        Gson gson = new Gson();
        String jsonString = bundle.getString("fragment1Container");
        Type entityType = new TypeToken<Fragment1Container>(){}.getType();
        fragment1Container = gson.fromJson(jsonString , entityType );
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 2021-02-07
      • 2019-02-26
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多