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

时间:2013-02-19 12:47:39

标签: android android-fragments android-viewpager fragmentpageradapter

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

我有一个使用包含viewpager的布局的FragmentActivity;该活动创建一个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 个答案:

答案 0 :(得分:6)

我从原始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

答案 1 :(得分:0)

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

Passing data between a fragment and its container activity