【问题标题】:How do I pass a variable through a FragmentPagerAdapter to a Fragment?如何通过 FragmentPagerAdapter 将变量传递给 Fragment?
【发布时间】:2013-02-19 12:47:38
【问题描述】:

我是一个android初学者,正在努力学习,这是我的第一个问题,所以如果问题太简单,请原谅,如果我使用论坛不正确,请告诉我。

我有一个使用包含 viewpager 的布局的 FragmentActivity;该活动创建了 MyFragmentPagerAdapter 的一个实例,该实例创建了多个 MyFragment 实例。都是 support.v4 版本。

我正在尝试找到一种将整数值(表示用户之前所做的选择,实际上可能是可绘制的 id)传递给片段的方法。我正在使用意图传递它 到这个活动,我知道我可以使用包将值从 FragmentPagerAdapter 传递到片段,但是我找不到从活动中获取它到 FragmentPagerAdapter 的方法。我尝试了几种方法,包括更改构造函数,但无法使其正常工作。

我错过了一些简单的东西吗?最好的方法是什么?

活动

    public class SecondActivity extends FragmentActivity {
      private MyIntegerAdapter1 mAdapter1;
      private ViewPager mPager1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        mAdapter1 = new MyIntegerAdapter1(getSupportFragmentManager());
        mPager1 = (ViewPager) findViewById(R.id.pager1);
        mPager1.setAdapter(mAdapter1);

FragmentPagerAdapter

    public class MyIntegerAdapter1 extends FragmentPagerAdapter {
    public MyIntegerAdapter1(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            Fragment f1 = new IntegerFragment();
            Bundle args1 = new Bundle();
            args1.putInt("param", R.drawable.image1);
            args1.putInt("number", 1);
            f1.setArguments(args1);
            return f1;
    etc

片段

    public class IntegerFragment extends Fragment {
      private int imageResourceId;
      private int numberSelected;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //change to avoid orientation crash
        imageResourceId = getArguments().getInt("param");
        numberSelected = getArguments().getInt("number");

【问题讨论】:

    标签: android android-fragments android-viewpager fragmentpageradapter


    【解决方案1】:

    我从原始的 Google 示例中提取了这个。

    片段:

    public class IntegerFragment extends Fragment {
        int imageResourceId;
        int numberSelected;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //change to avoid orientation crash
            imageResourceId = getArguments().getInt("param");
            numberSelected = getArguments().getInt("number");
        }
        
        public static Fragment newInstance(int imageResourceId, int numberSelected) {
            IntegerFragment f = new IntegerFragment();
            f.imageResourceId = imageResourceId;
            f.numberSelected = numberSelected;
            return f;
        }
    

    FragmentPagerAdapter

    public class MyIntegerAdapter1 extends FragmentPagerAdapter {
        private Fragment[] fragments;
    
        public MyIntegerAdapter1(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
            if (content != null && position < content.length) {
            if (fragments[position] == null) {
                fragments[position] = IntegerFragment.newInstance(R.drawable.image1, 1);
            }
            return fragments[position % fragments.length];
        }
        return null;
    etc
    

    【讨论】:

    • 谢谢,但这似乎是将变量从 FragmentPagerAdapter 传递到 Fragment 的另一种方法,我已经可以这样做了。我遇到问题的部分是将它从 FragmentActivity 传递到 FragmentPagerAdapter。之后我可以将它传递给 Fragment。
    • 事实上这是使用newInstance传递值的最佳方式
    【解决方案2】:

    问题结束了。我发现(从下面的链接)片段如何在其活动中调用方法。该方法正在提供价值。我不确定这是不是最好的方法,但它很简单而且很有效。

    Passing data between a fragment and its container activity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 2015-04-18
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多