如何通过FragmentPagerAdapter将变量传递给Fragment?

13

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

我有一个FragmentActivity使用了一个布局,其中包含一个ViewPager;activity创建了MyFragmentPagerAdapter的一个实例,它又创建了几个MyFragment的实例。所有都是support.v4版本。

我试图找到一种方法将一个整数值(代表用户先前选择的某个选项,实际上可以是可绘制id)传递给该片段。我使用意图将其传递给此活动,并且我知道我可以使用Bundle将值从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");
2个回答

7
我可以帮您翻译成中文。这段文字是从原始的Google示例中提取的。
片段(Fragment):
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了。 - David Walton
实际上,使用newInstance传递值是最好的方法。 - Varad Mondkar

1
问题解决了。我从下面的链接中找到了一个片段如何调用其活动中的方法的方法。该方法提供了值。我不确定这是否是最好的方法,但它很简单并且有效。

在片段和其容器活动之间传递数据


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接