71

フラグメントをページングするビューページャーがあります。私のサブクラスは、無駄に思えるメソッドでFragmentPagerAdapter新しいフラグメントを作成します。既に作成されたフラグメントを再利用できるに相当するものgetItemはありますか? 私のコードは以下です。FragmentPagerAdapterconvertViewlistAdapter

public class ProfilePagerAdapter extends FragmentPagerAdapter {

    ArrayList<Profile> mProfiles = new ArrayList<Profile>();

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

    /**
     * Adding a new profile object created a new page in the pager this adapter is set to.
     * @param profile
     */
    public void addProfile(Profile profile){
        mProfiles.add(profile);
    }

    @Override
    public int getCount() {
        return mProfiles.size();
    }

    @Override
    public Fragment getItem(int position) {
        return new ProfileFragment(mProfiles.get(position));
    }
}
4

6 に答える 6

102

FragmentPagerAdapterすでにあなたのためにキャッシュFragmentsします。各フラグメントにはタグが割り当てられてから、FragmentPagerAdapterを呼び出そうとしますfindFragmentByTaggetItemからの結果がでfindFragmentByTagある場合にのみ呼び出しますnull。したがって、フラグメントを自分でキャッシュする必要はありません。

于 2011-08-17T19:05:54.327 に答える
67

Geoff の投稿の付録:

FragmentFragmentPagerAdapter使用して参照を取得できますfindFragmentByTag()。タグの名前は次のように生成されます。

private static String makeFragmentName(int viewId, int index)
{
     return "android:switcher:" + viewId + ":" + index;
}

ここで、viewId は ViewPager の ID です

このリンクを見てください: http://code.google.com/p/openintents/source/browse/trunk/compatibility/AndroidSupportV2/src/android/support/v2/app/FragmentPagerAdapter.java#104

于 2012-01-22T23:18:12.423 に答える