Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
I switched part of my App from Activities to Fragments so that I can use the neat ActionBar tabs. However, after completing the transition I ran into an issue: whenever I switch to another tab, that Fragment gets created all over again. Both onCreate and onCreateView get called every time I get to a tab. I have 4 tabs, each of which is meant to open one of these fragments: Fragment ShopFragm...
I have a action bar with 3 navigation tabs: Fragment 1, Fragment 2 and Fragment 3. Now, I want to do a task whenever Fragment 3 selected, so I put my task code in onCreateView() method. However, I find that Fragment 3 does not do the task, it means the onCreateView() method is not called. (I check this by logging). The other strange things is: - When I slide: F2-> F3: the task not work. - When ...
I would like to detach a fragment from my FragmentPagerAdapter, but it doesnt seem to be working. Here is my pageradapter class, which I copied from the original code: public class PagerAdapter1 extends FragmentPagerAdapter { private List<String> fragments; private static final String TAG = "FragmentPagerAdapter"; private static final boolean DEBUG = true; pri...
  /*
   * 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 android.support.v4.app;
 
Implementation of android.support.v4.view.PagerAdapter that represents each page as a Fragment 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 getItem(int) and android.support.v4.view.PagerAdapter.getCount() to have a working adapter.

Here is an example implementation of a pager containing fragments of lists: development/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentPagerSupport.java complete

The R.layout.fragment_pager resource of the top-level fragment is: development/samples/Support4Demos/res/layout/fragment_pager.xml complete

The R.layout.fragment_pager_list resource containing each individual fragment's layout is: development/samples/Support4Demos/res/layout/fragment_pager_list.xml complete

 
 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;
 
     public FragmentPagerAdapter(FragmentManager fm) {
          = fm;
     }

    
Return the Fragment associated with a specified position.
 
     public abstract Fragment getItem(int position);
 
     @Override
     public void startUpdate(ViewGroup container) {
     }
 
     @Override
     public Object instantiateItem(ViewGroup containerint position) {
         if ( == null) {
              = .beginTransaction();
         }
 
         final long itemId = getItemId(position);
 
         // Do we already have this fragment?
         String name = makeFragmentName(container.getId(), itemId);
         Fragment fragment = .findFragmentByTag(name);
         if (fragment != null) {
             if () Log.v("Attaching item #" + itemId + ": f=" + fragment);
             .attach(fragment);
         } else {
             fragment = getItem(position);
             if () Log.v("Adding item #" + itemId + ": f=" + fragment);
             .add(container.getId(), fragment,
                    makeFragmentName(container.getId(), itemId));
        }
        if (fragment != ) {
            fragment.setMenuVisibility(false);
            fragment.setUserVisibleHint(false);
        }
        return fragment;
    }
    @Override
    public void destroyItem(ViewGroup containerint positionObject object) {
        if ( == null) {
        }
        if () Log.v("Detaching item #" + getItemId(position) + ": f=" + object
                + " v=" + ((Fragment)object).getView());
        .detach((Fragment)object);
    }
    @Override
    public void setPrimaryItem(ViewGroup containerint positionObject object) {
        Fragment fragment = (Fragment)object;
        if (fragment != ) {
            if ( != null) {
                .setMenuVisibility(false);
                .setUserVisibleHint(false);
            }
            if (fragment != null) {
                fragment.setMenuVisibility(true);
                fragment.setUserVisibleHint(true);
            }
             = fragment;
        }
    }
    @Override
    public void finishUpdate(ViewGroup container) {
        if ( != null) {
            .commitAllowingStateLoss();
             = null;
        }
    }
    @Override
    public boolean isViewFromObject(View viewObject object) {
        return ((Fragment)object).getView() == view;
    }
    @Override
    public Parcelable saveState() {
        return null;
    }
    @Override
    public void restoreState(Parcelable stateClassLoader loader) {
    }

    
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
    public long getItemId(int position) {
        return position;
    }
    private static String makeFragmentName(int viewIdlong id) {
        return "android:switcher:" + viewId + ":" + id;
    }
New to GrepCode? Check out our FAQ X