0

Jake Wharton のViewPagerIndicatorを使用して、スワイプ可能なタブを作成しています。現在、アプリで 4 つのタブを使用して動作させることができます。しかし、ページ/タブを変更すると、明らかに各フラグメントが再作成されます。たとえば、タブ A にいて、タブ C に変更してからタブ A に戻ると、A タブのフラグメントが再作成され、古いフラグメントがページの前面に表示されるだけではありません。

私は図書館の例に従おうとします。これが私のコードがどのように見えるかです:

ProfileViewPagerActivity

private static final String[] TAB_TITLES = new String[] { "Info",
        "Personal Event", "Favorite", "Attending" };

TestFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;
int action;
User user;

@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
    setContentView(R.layout.simple_tabs);
    action = getIntent().getIntExtra(Constants.LOAD_WHAT, Constants.LOAD_MY_PROFILE);
    user = (User) getIntent().getSerializableExtra(Constants.USER);
    mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

    mPager = (ViewPager) findViewById(R.id.pager);

    mPager.setAdapter(mAdapter);

    mIndicator = (TabPageIndicator) findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);
}

そして、これは ProfileViewPagerActivity 内のクラスとしてのアダプターです

テストフラグメントアダプター

private int mCount = TAB_TITLES.length;


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


    @Override
    public Fragment getItem(int position) {

        switch (position) {
        case 0:
            return UserInfoFragment.newInstance(action,user);

        case 1:
            return EventListFragment.newInstance(user.getUsername(), Constants.LIST_MINE, action);

        case 2:
            return EventListFragment.newInstance(user.getUsername(), Constants.LIST_FAVORITE, action);

        case 3:
            return EventListFragment.newInstance(user.getUsername(), Constants.LIST_ATTENDED, action);
        }
        return null;

    }

    @Override
    public int getCount() {
        return mCount;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TAB_TITLES[position].toUpperCase(Locale.US);
    }

上記のコードを使用すると、タブを変更するたびにフラグメントが再作成されます。TestFragmentAdapter コンストラクター内の各フラグメントに対して newInstance() メソッドを呼び出すなど、別のアプローチを試みてから、getItem メソッドで既に持っているフラグメント オブジェクトを呼び出すだけで、まだ機能しません。

私がすでに試した別の解決策は、各フラグメントでInstanceStateを保存することですが、うまくいきません。何か不足していますか?前もって感謝します。

編集

申し訳ありませんが、私の間違いです。「再インスタンス化されたフラグメント」関連の質問ではないと思います。さらにデバッグを行った後、フラグメントが FragmentAdapter に表示された場合、データのみが再度リロードされることがわかりました。私のフラグメントでは、OnCreateView メソッドで Web サーバーからデータをロードします。Android ドキュメントから、この問題を解決するには OnCreate メソッドに必要なデータをロードする必要があると思います。ありがとう。

4

2 に答える 2