public abstract class

FragmentPagerAdapter

extends PagerAdapter

 java.lang.Object

androidx.viewpager.widget.PagerAdapter

↳androidx.legacy.app.FragmentPagerAdapter

Gradle dependencies

compile group: 'androidx.legacy', name: 'legacy-support-v13', version: '1.0.0'

  • groupId: androidx.legacy
  • artifactId: legacy-support-v13
  • version: 1.0.0

Artifact androidx.legacy:legacy-support-v13:1.0.0 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.legacy:legacy-support-v13 com.android.support:support-v13

Androidx class mapping:

androidx.legacy.app.FragmentPagerAdapter android.support.v13.app.FragmentPagerAdapter

Overview

Implementation of PagerAdapter that represents each page as a that is persistently kept in the fragment manager as long as the user can return to the page.

This version of the pager is best for use when there are a handful of typically more static fragments to be paged through, such as a set of tabs. The fragment of each page the user visits will be kept in memory, though its view hierarchy may be destroyed when not visible. This can result in using a significant amount of memory since fragment instances can hold on to an arbitrary amount of state. For larger sets of pages, consider FragmentStatePagerAdapter.

When using FragmentPagerAdapter the host ViewPager must have a valid ID set.

Subclasses only need to implement FragmentPagerAdapter.getItem(int) and PagerAdapter.getCount() to have a working adapter.

Here is an example implementation of a pager containing fragments of lists: frameworks/support/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentPagerSupport.java complete

The R.layout.fragment_pager resource of the top-level fragment is: frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager.xml complete

The R.layout.fragment_pager_list resource containing each individual fragment's layout is: frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager_list.xml complete

Summary

Fields
from PagerAdapterPOSITION_NONE, POSITION_UNCHANGED
Constructors
publicFragmentPagerAdapter(FragmentManager fm)

Methods
public voiddestroyItem(ViewGroup container, int position, java.lang.Object object)

public voidfinishUpdate(ViewGroup container)

public abstract FragmentgetItem(int position)

Return the Fragment associated with a specified position.

public longgetItemId(int position)

Return a unique identifier for the item at the given position.

public java.lang.ObjectinstantiateItem(ViewGroup container, int position)

public booleanisViewFromObject(View view, java.lang.Object object)

public voidrestoreState(Parcelable state, java.lang.ClassLoader loader)

public ParcelablesaveState()

public voidsetPrimaryItem(ViewGroup container, int position, java.lang.Object object)

public voidstartUpdate(ViewGroup container)

from PagerAdapterdestroyItem, finishUpdate, getCount, getItemPosition, getPageTitle, getPageWidth, instantiateItem, notifyDataSetChanged, registerDataSetObserver, setPrimaryItem, startUpdate, unregisterDataSetObserver
from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public FragmentPagerAdapter(FragmentManager fm)

Deprecated: Use FragmentPagerAdapter instead.

Methods

public abstract Fragment getItem(int position)

Deprecated: Use FragmentPagerAdapter instead.

Return the Fragment associated with a specified position.

public void startUpdate(ViewGroup container)

Deprecated: Use FragmentPagerAdapter instead.

public java.lang.Object instantiateItem(ViewGroup container, int position)

Deprecated: Use FragmentPagerAdapter instead.

public void destroyItem(ViewGroup container, int position, java.lang.Object object)

Deprecated: Use FragmentPagerAdapter instead.

public void setPrimaryItem(ViewGroup container, int position, java.lang.Object object)

Deprecated: Use FragmentPagerAdapter instead.

public void finishUpdate(ViewGroup container)

Deprecated: Use FragmentPagerAdapter instead.

public boolean isViewFromObject(View view, java.lang.Object object)

Deprecated: Use FragmentPagerAdapter instead.

public Parcelable saveState()

Deprecated: Use FragmentPagerAdapter instead.

public void restoreState(Parcelable state, java.lang.ClassLoader loader)

Deprecated: Use FragmentPagerAdapter instead.

public long getItemId(int position)

Deprecated: Use FragmentPagerAdapter instead.

Return a unique identifier for the item at the given position.

The default implementation returns the given position. Subclasses should override this method if the positions of items can change.

Parameters:

position: Position within this adapter

Returns:

Unique identifier for the item at position

Source

/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.legacy.app;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Parcelable;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.PagerAdapter;

/**
 * Implementation of {@link PagerAdapter} that
 * represents each page as a {@link android.app.Fragment} that is persistently
 * kept in the fragment manager as long as the user can return to the page.
 *
 * <p>This version of the pager is best for use when there are a handful of
 * typically more static fragments to be paged through, such as a set of tabs.
 * The fragment of each page the user visits will be kept in memory, though its
 * view hierarchy may be destroyed when not visible.  This can result in using
 * a significant amount of memory since fragment instances can hold on to an
 * arbitrary amount of state.  For larger sets of pages, consider
 * {@link FragmentStatePagerAdapter}.
 *
 * <p>When using FragmentPagerAdapter the host ViewPager must have a
 * valid ID set.</p>
 *
 * <p>Subclasses only need to implement {@link #getItem(int)}
 * and {@link #getCount()} to have a working adapter.
 *
 * <p>Here is an example implementation of a pager containing fragments of
 * lists:
 *
 * {@sample frameworks/support/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentPagerSupport.java
 *      complete}
 *
 * <p>The <code>R.layout.fragment_pager</code> resource of the top-level fragment is:
 *
 * {@sample frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager.xml
 *      complete}
 *
 * <p>The <code>R.layout.fragment_pager_list</code> resource containing each
 * individual fragment's layout is:
 *
 * {@sample frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager_list.xml
 *      complete}
 *
 * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
 */
@Deprecated
public abstract class FragmentPagerAdapter extends PagerAdapter {
    private static final String TAG = "FragmentPagerAdapter";
    private static final boolean DEBUG = false;

    private final FragmentManager mFragmentManager;
    private FragmentTransaction mCurTransaction = null;
    private Fragment mCurrentPrimaryItem = null;

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    public FragmentPagerAdapter(FragmentManager fm) {
        mFragmentManager = fm;
    }

    /**
     * Return the Fragment associated with a specified position.
     *
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    public abstract Fragment getItem(int position);

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @Override
    public void startUpdate(ViewGroup container) {
        if (container.getId() == View.NO_ID) {
            throw new IllegalStateException("ViewPager with adapter " + this
                    + " requires a view id");
        }
    }

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @SuppressWarnings("ReferenceEquality")
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }

        final long itemId = getItemId(position);

        // Do we already have this fragment?
        String name = makeFragmentName(container.getId(), itemId);
        Fragment fragment = mFragmentManager.findFragmentByTag(name);
        if (fragment != null) {
            if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
            mCurTransaction.attach(fragment);
        } else {
            fragment = getItem(position);
            if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);
            mCurTransaction.add(container.getId(), fragment,
                    makeFragmentName(container.getId(), itemId));
        }
        if (fragment != mCurrentPrimaryItem) {
            fragment.setMenuVisibility(false);
            FragmentCompat.setUserVisibleHint(fragment, false);
        }

        return fragment;
    }

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }
        if (DEBUG) Log.v(TAG, "Detaching item #" + getItemId(position) + ": f=" + object
                + " v=" + ((Fragment)object).getView());
        mCurTransaction.detach((Fragment)object);
    }

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @SuppressWarnings("ReferenceEquality")
    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        Fragment fragment = (Fragment)object;
        if (fragment != mCurrentPrimaryItem) {
            if (mCurrentPrimaryItem != null) {
                mCurrentPrimaryItem.setMenuVisibility(false);
                FragmentCompat.setUserVisibleHint(mCurrentPrimaryItem, false);
            }
            if (fragment != null) {
                fragment.setMenuVisibility(true);
                FragmentCompat.setUserVisibleHint(fragment, true);
            }
            mCurrentPrimaryItem = fragment;
        }
    }

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @Override
    public void finishUpdate(ViewGroup container) {
        if (mCurTransaction != null) {
            mCurTransaction.commitAllowingStateLoss();
            mCurTransaction = null;
            mFragmentManager.executePendingTransactions();
        }
    }

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return ((Fragment)object).getView() == view;
    }

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @Override
    public Parcelable saveState() {
        return null;
    }

    /**
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    @Override
    public void restoreState(Parcelable state, ClassLoader loader) {
    }

    /**
     * Return a unique identifier for the item at the given position.
     *
     * <p>The default implementation returns the given position.
     * Subclasses should override this method if the positions of items can change.</p>
     *
     * @param position Position within this adapter
     * @return Unique identifier for the item at position
     *
     * @deprecated Use {@link androidx.fragment.app.FragmentPagerAdapter} instead.
     */
    @Deprecated
    public long getItemId(int position) {
        return position;
    }

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