13

私は Android の初心者で、学習しようとしています。これが私の最初の質問です。質問が単純すぎる場合はご容赦ください。また、フォーラムの使い方が間違っている場合は教えてください。

ビューページャーを含むレイアウトを使用する 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");
4

2 に答える 2

7

これを元の 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
于 2013-02-19T13:35:28.547 に答える
1

問題終了。(以下のリンクから) フラグメントがそのアクティビティでメソッドを呼び出す方法を見つけました。その方法は価値を提供しています。それが最善の方法かどうかはわかりませんが、シンプルで機能します。

フラグメントとそのコンテナー アクティビティの間でデータを渡す

于 2013-02-20T10:37:48.290 に答える