0

アプリで JakeWharton ライブラリを使用したいと考えています。サンプルの SampleTabsDefault の例に興味があります。ここに画像の説明を入力 そして今、立ち往生しています。このサンプルではテキストのみを変更しており、フラグメントを変更したい (各フラグメントには独自のレイアウトがあり、各レイアウトにはボタン、チェックボックスなどの異なるコントロールがあります) FragmentPagerAdapter から拡張されたクラスでこのメソッドを変更する必要があると考えています:

public Fragment getItem(int position) {
            return TestFragment.newInstance(CONTENT[position % CONTENT.length]);
        }

特定の位置に応じて、(独自のレイアウトで) 新しいフラグメントを作成したいと思います。

私はこのコードを実装しました:

public class MainActivity extends FragmentActivity {
    private static final String[] CONTENT = new String[] {"My Profile", "Statistics"};

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

        FragmentPagerAdapter adapter = new GoogleMusicAdapter(getSupportFragmentManager());

        ViewPager pager = (ViewPager)findViewById(R.id.pager);
        pager.setAdapter(adapter);

        TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
        indicator.setViewPager(pager);



        }


    class GoogleMusicAdapter extends FragmentPagerAdapter {
        public GoogleMusicAdapter(FragmentManager fm) {
            super(fm);
        }


        public Fragment getItem(int position) {
            if (position==0)
            return MyProfile.newInstance(CONTENT[position % CONTENT.length]);
            else if (position==1)
            return Statistics.newInstance(CONTENT[position % CONTENT.length]);
            return null;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return CONTENT[position % CONTENT.length].toUpperCase();
        }

        @Override
        public int getCount() {
          return CONTENT.length;
        }
    }
}

public class MyProfile extends Fragment {
      private static final String KEY_CONTENT = "TestFragment:Content";


        public static MyProfile newInstance(String content) {
            MyProfile fragment = new MyProfile();

            fragment.mContent = content;

            return fragment;
        }

        private String mContent = "???";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) {
                mContent = savedInstanceState.getString(KEY_CONTENT);
            }


        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_basic, container, false);
            Button button = (Button) view.findViewById(R.id.fragment_button);

            button.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    Activity activity = getActivity();

                    if (activity != null) {
                        Toast.makeText(activity, "fragmen1", Toast.LENGTH_SHORT).show();
                    }
                }

            });

            return view;
        }
           public void onSaveInstanceState(Bundle outState) {
                super.onSaveInstanceState(outState);
                outState.putString(KEY_CONTENT, mContent);
            }
}

この:

public class Statistics extends Fragment {
      private static final String KEY_CONTENT = "TestFragment:Content";


        public static Statistics newInstance(String content) {
            Statistics fragment = new Statistics();

            fragment.mContent = content;

            return fragment;
        }

        private String mContent = "???";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) {
                mContent = savedInstanceState.getString(KEY_CONTENT);
            }


        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_basic2, container, false);
            Button button = (Button) view.findViewById(R.id.fragment_button);

            button.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    Activity activity = getActivity();

                    if (activity != null) {
                        Toast.makeText(activity, "fragmen2", Toast.LENGTH_SHORT).show();
                    }
                }

            });

            return view;
        }

           @Override
            public void onSaveInstanceState(Bundle outState) {
                super.onSaveInstanceState(outState);
                outState.putString(KEY_CONTENT, mContent);
            }
}

動作しません... ページを切り替えることができず、フラグメントからのレイアウトが表示されません...

4

1 に答える 1

2

getItem()内部のメソッドでFragmentPagerAdapterは、位置に応じて他のフラグメントを返すことができます。たとえば、次のようになります。

 public Fragment getItem(int position) {
 switch(position)
       {
               case 0:
                    TestFragment fragment = new TestFragment();  
                    return fragment;

                case 1:
                    TestFragment2 fragment2 = new TestFragment2();  
                    return fragment2;

         }

                    DefaultFragment fragment3 = new DefaultFragment();  
                    return fragment3;

         }
于 2012-12-05T21:20:44.773 に答える