Example usage for android.support.v4.view ViewPager setOnPageChangeListener

List of usage examples for android.support.v4.view ViewPager setOnPageChangeListener

Introduction

In this page you can find the example usage for android.support.v4.view ViewPager setOnPageChangeListener.

Prototype

public void setOnPageChangeListener(OnPageChangeListener listener) 

Source Link

Document

Set a listener that will be invoked whenever the page changes or is incrementally scrolled.

Usage

From source file:com.google.android.apps.dashclock.configuration.ConfigureAppearanceFragment.java

private void configureStylePager(final ViewPager pager, final PagerPositionStrip positionStrip,
        final String[] styleNames, final String styleComponent, final int gravity, final String preference) {
    String currentStyleName = mCurrentStyleNames.get(preference);

    final LayoutInflater inflater = getActivity().getLayoutInflater();
    pager.setAdapter(new PagerAdapter() {
        @Override/*from  w  ww . j a v a2  s  .  c  o  m*/
        public int getCount() {
            return styleNames.length;
        }

        @Override
        public boolean isViewFromObject(View view, Object o) {
            return view == o;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            FrameLayout wrapper = new FrameLayout(getActivity());
            ViewPager.LayoutParams wrapperLp = new ViewPager.LayoutParams();
            wrapper.setLayoutParams(wrapperLp);
            String styleName = styleNames[position];
            if (styleName.contains("analog")) {
                styleName += "_white";
            }
            View v = inflater.inflate(
                    AppearanceConfig.getLayoutByStyleName(getActivity(), styleComponent, styleName), container,
                    false);
            FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            lp.gravity = gravity;
            v.setLayoutParams(lp);
            wrapper.addView(v);
            container.addView(wrapper);
            return wrapper;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    });

    pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            mCurrentStyleNames.put(preference, styleNames[position]);
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            positionStrip.setPosition(position + positionOffset);
        }
    });

    positionStrip.setPageCount(styleNames.length);

    pager.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            switch (motionEvent.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                showPositionStrips(true, -1);
                break;

            case MotionEvent.ACTION_UP:
                showPositionStrips(false, AUTO_HIDE_DELAY_MILLIS);
                break;
            }
            return false;
        }
    });

    for (int i = 0; i < styleNames.length; i++) {
        if (currentStyleName.equals(styleNames[i])) {
            pager.setCurrentItem(i);
            positionStrip.setPosition(i);
            break;
        }
    }
}

From source file:ru.gkpromtech.exhibition.media.FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_full_image);

    Bundle extras = getIntent().getExtras();
    items = (List<Media>) extras.getSerializable("items");
    files = (List<String>) extras.getSerializable("files");
    int index = extras.getInt("index");

    if (items != null)
        mode = SHOW_ITEMS_MODE;/*  w w w  .j  a v a2s  . c om*/
    else if (files != null)
        mode = SHOW_FILES_MODE;

    final View controlsView = findViewById(R.id.fullscreen_content_controls);
    final ViewPager pager = (ViewPager) findViewById(R.id.pager);

    appDirectoryName = getResources().getString(R.string.app_name);
    imageRoot = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            appDirectoryName);

    // ViewPager and its adapters use support library
    // fragments, so use getSupportFragmentManager.
    pager.setAdapter(new FullImagePagerAdapter(getSupportFragmentManager()));
    pager.setCurrentItem(index);
    if (mode == SHOW_ITEMS_MODE)
        setTitle(items.get(index).name);
    else if (mode == SHOW_FILES_MODE)
        setTitle(new File(files.get(index)).getName());
    else
        setTitle("Photo");

    // Set up an instance of SystemUiHider to control the system UI for
    // this activity.
    mSystemUiHider = SystemUiHider.getInstance(this, pager, HIDER_FLAGS);
    mSystemUiHider.setup();
    mSystemUiHider.setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() {
        // Cached values.
        int mControlsHeight;
        int mShortAnimTime;

        @Override
        public void onVisibilityChange(boolean visible) {
            // If the ViewPropertyAnimator API is available
            // (Honeycomb MR2 and later), use it to animate the
            // in-layout UI controls at the bottom of the
            // screen.
            if (mControlsHeight == 0) {
                mControlsHeight = controlsView.getHeight();
            }
            if (mShortAnimTime == 0) {
                mShortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
            }
            controlsView.animate().translationY(visible ? 0 : mControlsHeight).setDuration(mShortAnimTime);

            if (visible && AUTO_HIDE) {
                // Schedule a hide().
                delayedHide(AUTO_HIDE_DELAY_MILLIS);
            }
        }
    });

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {
        }

        @Override
        public void onPageSelected(int index) {
            if (mode == SHOW_ITEMS_MODE)
                setTitle(items.get(index).name);
            else if (mode == SHOW_FILES_MODE)
                setTitle(new File(files.get(index)).getName());
            else
                setTitle("Photo");
        }

        @Override
        public void onPageScrollStateChanged(int i) {
        }
    });

    // Upon interacting with UI controls, delay any scheduled hide()
    // operations to prevent the jarring behavior of controls going away
    // while interacting with the UI.
    pager.setOnTouchListener(mDelayHideTouchListener);
}

From source file:com.z.stproperty.PropertyDetailFragment.java

/**
 * PHOTOS/*  w w w.  j av  a 2s  .c om*/
 * 
 * photos are shown in pager and when the user touches the pager 
 * then scroll stops to scroll vertically
 * 
 * DETAILS
 * 
 * Will show all the details related to the property or directory
 * like type,
 * title,
 * subtype,
 * district etc..
 * 
 * FACILITIES
 * 
 * This method will add the facility details by calling both
 * loadLandDisplay() and loadPortraitDisplay(). It will check weather there
 * is any facility or not and if there is no facility, then noFacilites
 * TextView is made visible. Else, the TextView is made gone and
 * directory_facilities_row layout is inflated and is added to
 * facilityParent.
 * 
 */
private View addProjectDetail() {
    View view = inflater.inflate(R.layout.property_details, null);
    try {
        projectDetailScrollView = (ScrollView) view.findViewById(R.id.DetailsScroll);
        if (detailsJson == null) {
            SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
            detailsJson = new JSONObject(mPrefs.getString("PropertyDetailJson", null));
        } else {
            SharedPreferences mPrefs = PreferenceManager
                    .getDefaultSharedPreferences(getActivity().getApplicationContext());
            mPrefs.edit().putString("PropertyDetailJson", detailsJson.toString()).commit();
        }
        try {
            ((HelveticaBold) view.findViewById(R.id.propertyTitle))
                    .setText(detailsJson.getString("property_title"));
            ((HelveticaBold) view.findViewById(R.id.projectName))
                    .setText(detailsJson.getString("project_name"));
            ((HelveticaBold) view.findViewById(R.id.Classification))
                    .setText(detailsJson.getString("property_classification"));
            ((HelveticaBold) view.findViewById(R.id.Tenure))
                    .setText(detailsJson.getString("tenure").replace("null", "-"));
            ((HelveticaBold) view.findViewById(R.id.propertyType))
                    .setText(detailsJson.getString("property_type"));
        } catch (Exception e) {
            Toast.makeText(getActivity(), e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
        }
        String floorArea = "-";
        if (!detailsJson.getString("builtin_area").equals("null")) {
            floorArea = detailsJson.getString("builtin_area") + " sqft";
        }
        ((HelveticaBold) view.findViewById(R.id.FloorArea)).setText(floorArea);

        ((HelveticaBold) view.findViewById(R.id.Address)).setText(detailsJson.getString("address"));
        ((HelveticaBold) view.findViewById(R.id.PostalCode))
                .setText(detailsJson.getString("postal_code").replace("null", "-"));
        String bedRoom = detailsJson.getString("bedrooms");
        String bathRoom = detailsJson.getString("bathroom");
        ((HelveticaBold) view.findViewById(R.id.Bedrooms))
                .setText(bedRoom.equals("null") || bedRoom.equals("0") ? "-" : bedRoom);
        ((HelveticaBold) view.findViewById(R.id.Bathrooms))
                .setText(bathRoom.equals("null") || bathRoom.equals("0") ? "-" : bathRoom);
        String psf = detailsJson.getString("psf");
        psf = psf.equals("null") || psf.equals("0") ? "-" : "SGD " + psf;
        ((HelveticaBold) view.findViewById(R.id.Psf)).setText(psf);
        String district = detailsJson.get("property_district").toString();
        String estate = detailsJson.get("property_estate").toString();
        if (!estate.equals("")) {
            district = estate;
        }
        ((HelveticaBold) view.findViewById(R.id.district)).setText(district);
        price = detailsJson.getString("price").replace("null", "");
        price = price.equals("") || price.equalsIgnoreCase("price on ask") ? price
                : "SGD " + SharedFunction.getPriceWithComma(detailsJson.getString("price"));
        view.findViewById(R.id.PSFDetailLayout).setVisibility(psf.equals("-") ? View.GONE : View.VISIBLE);
        if (price.equals("")) {
            ((LinearLayout) view.findViewById(R.id.PriceLayout)).setVisibility(View.GONE);
            ((LinearLayout) view.findViewById(R.id.PSFDetailLayout)).setVisibility(View.GONE);
        } else {
            ((HelveticaBold) view.findViewById(R.id.Price)).setText(price);
        }
        ((HelveticaBold) view.findViewById(R.id.Psf)).setText(psf);
        title = detailsJson.getString("property_title");
        prurl = detailsJson.getString("url");
        JSONObject sellerJson = detailsJson.getJSONObject("seller_info");
        String registerNoStr = sellerJson.getString("agent_cea_reg_no").replace("null", "-");
        String licenceNoStr = sellerJson.getString("agent_cea_license_no").replace("null", "-");
        String agentImageUrl = sellerJson.getString("agent_image");
        agentEmail = sellerJson.getString("agent_email");
        mobileNoStr = sellerJson.getString("agent_mobile");
        ((HelveticaBold) view.findViewById(R.id.AgentName))
                .setText("Agent Name : " + sellerJson.getString("agent_name"));
        ((HelveticaBold) view.findViewById(R.id.AgentMobile)).setText(sellerJson.getString("agent_mobile"));
        ((HelveticaBold) view.findViewById(R.id.RegisterNo)).setText(registerNoStr);
        ((HelveticaBold) view.findViewById(R.id.LicenceNo)).setText(licenceNoStr);
        ((HelveticaBold) view.findViewById(R.id.agentEmail)).setText(sellerJson.getString("agent_email"));
        ((HelveticaBold) view.findViewById(R.id.Agency)).setText(sellerJson.getString("agency_name"));
        imageLoader.displayImage(agentImageUrl, (ImageView) view.findViewById(R.id.AgentImage));

        if (detailsJson.getString("property_for").equalsIgnoreCase("for sale")
                && !price.equalsIgnoreCase("price on ask") && !price.equalsIgnoreCase("")) {
            ((Button) view.findViewById(R.id.LoanCalculator)).setOnClickListener(onClick);
        } else {
            ((Button) view.findViewById(R.id.LoanCalculator))
                    .setBackgroundResource(R.drawable.green_btn_disables);
            ((Button) view.findViewById(R.id.LoanCalculator)).getBackground().setAlpha(128);
        }
        final TextView imageCount = (TextView) view.findViewById(R.id.imageCount);
        view.findViewById(R.id.AgentMobile).setOnClickListener(onClick);
        view.findViewById(R.id.SendEmailBtn).setOnClickListener(onClick);
        view.findViewById(R.id.SendEnquiryBtn).setOnClickListener(onClick);
        ViewPager pager = (ViewPager) view.findViewById(R.id.pager);

        PhotoGallery gallery = new PhotoGallery();
        pager.setAdapter(gallery);
        JSONArray galery = detailsJson.getJSONArray("photos");
        final String[] photosArray = new String[galery.length()];
        imageCount.setText("1/" + photosArray.length);
        for (int index = 0; index < galery.length(); index++) {
            View imageLoading = inflater.inflate(R.layout.image_with_loading, null);
            ImageView image = (ImageView) imageLoading.findViewById(R.id.galleryPhoto);
            photosArray[index] = galery.getString(index).replace("_S.", "_L.");
            imageLoader.displayImage(galery.getString(index).replace("_S.", "_L."), image);
            final int curIndex = index;
            imageLoading.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        projectDetailScrollView.requestDisallowInterceptTouchEvent(true);
                    } else if (event.getAction() == MotionEvent.ACTION_UP) {
                        projectDetailScrollView.requestDisallowInterceptTouchEvent(false);
                    }
                    return false;
                }
            });
            imageLoading.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Intent galleryIntent = new Intent(getActivity(), Photos.class);
                    galleryIntent.putExtra("photos1", photosArray);
                    galleryIntent.putExtra("selected", curIndex);
                    startActivity(galleryIntent);
                }
            });
            gallery.addView(imageLoading);
        }
        pager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageSelected(int arg0) {
                imageCount.setText((arg0 + 1) + "/" + photosArray.length);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // Auto-generated method stub
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // Auto-generated method stub
            }
        });
        gallery.notifyDataSetChanged();
        view.findViewById(R.id.BedBathLayout).setVisibility(
                Arrays.asList(Constants.RESIDENTIAL_TYPE).contains(detailsJson.getString("property_type"))
                        ? View.VISIBLE
                        : View.GONE);
    } catch (Exception e) {
        Log.e(this.getClass().getSimpleName(), e.getLocalizedMessage(), e);
    }
    return view;
}

From source file:com.telestax.mayday_customer.fragment.ProductFragment.java

@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View viewInfo = inflater.inflate(R.layout.product, container, false);

    ViewPager viewPager = (ViewPager) viewInfo.findViewById(R.id.view_pager);
    mDotsLayout = (LinearLayout) viewInfo.findViewById(R.id.viewPagerCountDots);

    mInitReceiver = new BroadcastReceiver() {
        @Override/*from   ww w . j a  v a 2  s  . c  o m*/
        public void onReceive(Context context, Intent intent) {
            mImageViewCustomerMayDayCall.setVisibility(View.VISIBLE);
        }
    };

    //Register broadcast receiver
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mInitReceiver,
            new IntentFilter(Constant.BROADCAST_INTENT));

    // Initialize UI
    ImageView ImageViewProductOne = (ImageView) viewInfo.findViewById(R.id.imageView_product);
    ImageView ImageViewProductTwo = (ImageView) viewInfo.findViewById(R.id.imageView_product_two);
    ImageView ImageViewProductThree = (ImageView) viewInfo.findViewById(R.id.imageView_product_three);
    ImageView ImageViewProductFour = (ImageView) viewInfo.findViewById(R.id.imageView_product_four);
    ImageView ImageViewProductFive = (ImageView) viewInfo.findViewById(R.id.imageView_product_five);
    ImageView ImageViewProductSix = (ImageView) viewInfo.findViewById(R.id.imageView_product_six);
    ImageView ImageViewProductSeven = (ImageView) viewInfo.findViewById(R.id.imageView_product_seven);

    mImageViewCustomerMayDayCall = (ImageView) viewInfo.findViewById(R.id.imageView_customer_mayday);

    ImageViewProductOne.setOnClickListener(this);
    ImageViewProductTwo.setOnClickListener(this);
    ImageViewProductThree.setOnClickListener(this);
    ImageViewProductFour.setOnClickListener(this);
    ImageViewProductFive.setOnClickListener(this);
    ImageViewProductSix.setOnClickListener(this);
    ImageViewProductSeven.setOnClickListener(this);

    String mayDayAction = MainActivity.getMaydaySharePref(getActivity());
    if (mayDayAction != null) {
        if (mayDayAction.equalsIgnoreCase(Constant.YES)) {
            mImageViewCustomerMayDayCall.setVisibility(View.INVISIBLE);
        } else {
            mImageViewCustomerMayDayCall.setVisibility(View.VISIBLE);
        }
    }

    ImagePagerAdapter adapter = new ImagePagerAdapter();
    viewPager.setAdapter(adapter);
    mDotsLayout.setBaselineAligned(true);
    setUiPageViewController();

    // ViewPager slider event
    viewPager.setOnPageChangeListener(viewPagerPageChangeListener);

    mImageViewCustomerMayDayCall.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final CharSequence[] items = { getResources().getString(R.string.video),
                    getResources().getString(R.string.instant_message), };

            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle(getResources().getString(R.string.action));
            builder.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    if (item == 0) {
                        mCallBack.onVideoCall();
                        mImageViewCustomerMayDayCall.setVisibility(View.INVISIBLE);
                    } else if (item == 1) {
                        mCallBack.onChatMessage();
                        mImageViewCustomerMayDayCall.setVisibility(View.INVISIBLE);

                    }
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    });
    return viewInfo;
}

From source file:org.zywx.wbpalmstar.engine.EBrowserWindow.java

private void hMultiPopOverOpen(final ArrayList<EBrwViewEntry> entitys, final int index) {
    final ArrayList<EBounceView> viewList = new ArrayList<EBounceView>();
    EBrwViewEntry mainEntry = entitys.get(0);
    Log.d("multi", "entitys num:" + entitys.size());
    if (checkMultiPop(entitys)) {
        return;//from   w  w  w  . j  a v  a 2s .  c om
    }
    EBrowserView parentBrowerview = new EBrowserView(mContext, mainEntry.mType, this);
    parentBrowerview.setVisibility(VISIBLE);
    parentBrowerview.setName(mainEntry.mViewName);
    parentBrowerview.setRelativeUrl(mainEntry.mRelativeUrl);
    parentBrowerview.setDateType(mainEntry.mDataType);
    LayoutParams newParm = new LayoutParams(mainEntry.mWidth, mainEntry.mHeight);
    // newParm.leftMargin = entity.mX;
    // newParm.topMargin = entity.mY;
    int parentRight = getRight();
    int parentBottom = getBottom();
    int newRight = mainEntry.mX + mainEntry.mWidth;
    if (newRight > parentRight) {
        newParm.rightMargin = parentRight - newRight;
    } else {
        newParm.rightMargin = 0;
    }
    int newBottom = mainEntry.mY + mainEntry.mHeight;
    if (newBottom > parentBottom) {
        newParm.bottomMargin = parentBottom - newBottom;
    } else if (0 == newBottom) {
        mainEntry.mY = mainEntry.mY + 1;
        newParm.bottomMargin = 0;
    } else {
        newParm.bottomMargin = 0;
    }
    newParm.topMargin = mainEntry.mY;
    newParm.leftMargin = mainEntry.mX;
    EBounceView bounceView = new EBounceView(mContext);
    EUtil.viewBaseSetting(bounceView);
    bounceView.setLayoutParams(newParm);
    bounceView.addView(parentBrowerview);
    addView(bounceView);
    if (mainEntry.hasExtraInfo) {
        /** wanglei del 20151124*/
        //            parentBrowerview.setBrwViewBackground(mainEntry.mOpaque, mainEntry.mBgColor, "");
        /** wanglei add 20151124*/
        bounceView.setBounceViewBackground(mainEntry.mOpaque, mainEntry.mBgColor, "", parentBrowerview);
    } else {
        if (mainEntry.checkFlag(EBrwViewEntry.F_FLAG_OPAQUE)) {
            parentBrowerview.setOpaque(true);
        } else {
            parentBrowerview.setOpaque(false);
        }
    }
    parentBrowerview.init();

    for (int i = 1; i < entitys.size(); i++) {
        EBrwViewEntry entity = entitys.get(i);
        EBrowserView childView = new EBrowserView(mContext, entity.mType, this);
        childView.setVisibility(VISIBLE);
        childView.setName(entity.mViewName);
        childView.setRelativeUrl(entity.mRelativeUrl);
        childView.setDateType(entity.mDataType);
        EBounceView bounceViewChild = new EBounceView(mContext);
        EUtil.viewBaseSetting(bounceViewChild);
        bounceViewChild.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        if (entity.hasExtraInfo) {
            /** wanglei del 20151124*/
            //                childView.setBrwViewBackground(entity.mOpaque, entity.mBgColor, "");
            /** wanglei add 20151124*/
            bounceViewChild.setBounceViewBackground(entity.mOpaque, entity.mBgColor, "", childView);
        }
        bounceViewChild.addView(childView);
        viewList.add(bounceViewChild);

    }
    BDebug.i("multi", "viewlist num:", viewList.size());
    LayoutParams pagerParm = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT);
    ViewPager mPager = new ViewPager(mContext);
    mPager.setAdapter(new MultiPopAdapter(viewList));
    mPager.setCurrentItem(index);
    mPager.setOnPageChangeListener(new MyPageChangedListener(parentBrowerview.getName()));
    mPager.setLayoutParams(pagerParm);
    mPager.setBackgroundColor(Color.TRANSPARENT);
    parentBrowerview.addView(mPager);
    mMultiPopPager.put(parentBrowerview.getName(), mPager);
    final ArrayList<EBrowserView> list = new ArrayList<EBrowserView>();
    list.add(parentBrowerview);

    EBrowserView eBrowserView = loadOneOfMultiPop(viewList.get(index), entitys.get(index + 1), list);
    eBrowserView.setEBrowserViewChangeListener(new EBrowserView.OnEBrowserViewChangeListener() {
        @Override
        public void onPageFinish() {
            loadTheRestOfMultiPop(index, viewList, entitys, list);
        }
    });
    BDebug.i("multipop", index, "load...");
    mMultiPopTable.put(parentBrowerview.getName(), list);
}

From source file:com.momock.outlet.tab.FragmentPagerTabOutlet.java

public void attach(final FragmentTabHolder tabHolder) {
    Logger.check(tabHolder != null, "Parameter tabHolder cannot be null!");
    this.target = tabHolder;
    final TabHost tabHost = target.getTabHost();
    plugs = getPlugs();// w  w  w.  j  av a2  s  . c o  m
    Logger.check(target.getTabContent() instanceof ViewPager, "The tab content container must be a ViewPager!");
    final ViewPager tabContent = (ViewPager) target.getTabContent();
    tabContent.setOffscreenPageLimit(plugs.getItemCount());
    tabContent.setAdapter(new FragmentPagerAdapter(target.getFragmentManager()) {

        @Override
        public Fragment getItem(final int position) {
            final ITabPlug plug = (ITabPlug) plugs.getItem(position);
            Fragment f = ((FragmentHolder) plug.getContent()).getFragment();
            if (f instanceof CaseFragment) {
                CaseFragment cf = (CaseFragment) f;
                cf.setActiveCaseIndicator(new IActiveCaseIndicator() {

                    @Override
                    public boolean isActiveCase() {
                        return getActivePlug() == plug;
                    }

                });
            }
            return f;
        }

        @Override
        public int getCount() {
            return plugs.getItemCount();
        }

        void doFinishUpdate(ViewGroup container) {
            super.finishUpdate(container);
        }

        @Override
        public void finishUpdate(final ViewGroup container) {
            new Handler().post(new Runnable() {

                @Override
                public void run() {
                    doFinishUpdate(container);
                }

            });
        }

        @Override
        public void setPrimaryItem(ViewGroup container, int position, final Object object) {
            super.setPrimaryItem(container, position, object);
            new Handler().post(new Runnable() {

                @Override
                public void run() {

                    if (object instanceof CaseFragment) {
                        CaseFragment cf = (CaseFragment) object;
                        if (cf.getCase() != null && cf.getCase().getParent() != null)
                            cf.getCase().getParent().setActiveCase(cf.getCase());
                    }
                }

            });
        }
    });
    tabHost.setup();
    for (int i = 0; i < plugs.getItemCount(); i++) {
        final ITabPlug plug = (ITabPlug) plugs.getItem(i);
        Logger.check(plug.getContent() instanceof FragmentHolder,
                "Plug in PagerTabOutlet must contains a FragmentHolder content!");

        TabHost.TabSpec spec = tabHost.newTabSpec("" + i);
        target.setTabIndicator(spec, plug);
        spec.setContent(new TabContentFactory() {

            @Override
            public View createTabContent(String tag) {
                View v = new View(tabHost.getContext());
                v.setMinimumWidth(0);
                v.setMinimumHeight(0);
                return v;
            }

        });
        tabHost.addTab(spec);
        if (getActivePlug() == plug) {
            tabHost.setCurrentTab(i);
            tabContent.setCurrentItem(i, true);
        }
    }
    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {

        @Override
        public void onTabChanged(String tabId) {
            int index = tabHost.getCurrentTab();
            ITabPlug plug = (ITabPlug) plugs.getItem(index);
            setActivePlug(plug);
            tabContent.setCurrentItem(index, true);
        }
    });
    tabContent.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            TabWidget widget = tabHost.getTabWidget();
            int oldFocusability = widget.getDescendantFocusability();
            widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
            tabHost.setCurrentTab(position);
            widget.setDescendantFocusability(oldFocusability);
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
}