0

私が作成し、FragmentPagerAdapterページ数を 3 と定義すると、ページ 1 にはコンテンツがあり、ページ 2 にはコンテンツがなく、ページ 3 にはコンテンツがあります。ページ数を 4 以上に変更すると、すべてのページにコンテンツがあります。どうしてこれなの?2 つのページを作成すると、コンテンツはありませんか? これで何が欠けていますか?

これが私のコードです:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

    public Fragment getItem(int position) {
        /*
         * Here we are going to return the correct type of fragment for each
         * of the pages
         */
        Log.d("Position", "Default Postion: " + position);
        return MainListFragment.init(position); 

    }

        @Override
        public int getCount() {
            // Show 3 total pages.
            return 3;
        }

私のコンテンツはすべて同じであることに気付きました。それで問題ありません。ここでのポイントは、3 つのページがある場合、コンテンツがあるのは 2 つだけだということです。4 ページ以上ある場合、すべてが期待どおりに機能します。

さらに奇妙なのは、出力を のonCreateメソッドに入れListFragmentたことです。これは表示されるものであり、実際にはすべてを作成しますが、すべてListFragmentsを表示するわけではありません。

編集:

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

        RequestUserFeed feed = new RequestUserFeed();
        feed.execute(URL);

        // Create the adapter that will return a fragment for each of the three
        // primary sections of the app.
        mSectionsPagerAdapter = new SectionsPagerAdapter(
                getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
    }

残りのコードは次のとおりです。

public static class MainListFragment extends ListFragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */

        int fragNum;
        public static final String ARG_SECTION_NUMBER = "section_number";

        private static MainListFragment init(int val) {
            MainListFragment mfl = new MainListFragment();

            Bundle args = new Bundle();
            args.putInt("val", val);
            mfl.setArguments(args);

            return mfl;
        }

        public MainListFragment() {
        }

        /**
         * Retrieving this instance's number from its arguments.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d("Fragment", "Fragment Created for " + getArguments().getInt("val"));
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.setting_fragment,
                    container, false);



            return rootView;
        }

         @Override
            public void onActivityCreated(Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                SettingListAdapter settingAdapter = new SettingListAdapter(
                        getActivity().getApplicationContext(),
                        R.layout.setting_item_row, MainFeedActivity.mProfileList);
                ListView listView = (ListView) getActivity().findViewById(android.R.id.list);
                listView.setAdapter(settingAdapter);
            }


    }

現在の状態では、1 ページのリスト ビューしか取得できません。このコードを移動すると:

SettingListAdapter settingAdapter = new SettingListAdapter(
                        getActivity().getApplicationContext(),
                        R.layout.setting_item_row, MainFeedActivity.mProfileList);
                ListView listView = (ListView) getActivity().findViewById(android.R.id.list);
                listView.setAdapter(settingAdapter);

onCreateView別の結果が得られます。リスト アダプターを設定すると、onCreateViewより多くのページが取り込まれます。紛らわしいことはわかっていますが、言及する価値があると考えました。

4

1 に答える 1

0

switch in でこのように位置が定義されているのはなぜですかgetItem。3 つのアイテムがあるため、位置は 0、1、2 になります。

switch (position) {
        case 0:
            Log.d("Position", "Postion: " + position);
            return MainListFragment.init(position); 
        case 1:
            Log.d("Position", "Postion: " + position);
            return MainListFragment.init(position); 
        case 2:
            Log.d("Position", "Postion: " + position);
            return MainListFragment.init(position); 
        }
于 2013-10-06T05:20:35.733 に答える