ActivtiyPageAdapter管理Activity的PageAdapter

管理 Activity的PageAdapter

package com.example.viewpagertest;

import android.app.Activity;
import android.app.LocalActivityManager;
import android.content.Intent;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

public abstract class ActivtiyPageAdapter extends PagerAdapter {
    private  LocalActivityManager mActivityManager;
    private Activity mCurrentPrimaryItem = null;
    public ActivtiyPageAdapter(LocalActivityManager manager) {
        mActivityManager = manager;
    }
    public abstract Intent getItem(int position);
    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        final long itemId = getItemId(position);

        String name = makeActivityName(container.getId(), itemId);
        Activity activity = mActivityManager.getActivity(name);
        Log.i("ActivtiyPageAdapter","instantiateItem itemId =="+itemId+"  name=="+name+" activity=="+(activity == null));

        if (activity == null) {
            Intent  intent = getItem(position);
            mActivityManager.startActivity(name,intent);
            activity = mActivityManager.getActivity(name);
            container.addView(activity.getWindow().peekDecorView());
        }

        return activity;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        final long itemId = getItemId(position);

        String name = makeActivityName(container.getId(), itemId);
        Activity activity = mActivityManager.getActivity(name);
        container.removeView(activity.getWindow().peekDecorView());
        Log.i("MyViewPageAdapter","destroyItem position =="+position+"  object=="+object);
        mActivityManager.destroyActivity(name,true);

    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        Activity activity = (Activity)object;
        if (activity != mCurrentPrimaryItem) {
            if (activity != null) {
                mActivityManager.dispatchResume();
            }
            if(activity != null)
            {
                final long itemId = getItemId(position);
                String name = makeActivityName(container.getId(), itemId);
                Intent  intent = getItem(position);
                mActivityManager.startActivity(name,intent);
            }
            mCurrentPrimaryItem = activity;
        }
        Log.i("MyViewPageAdapter","setPrimaryItem position =="+position+"  object=="+object+" container count="+container.getChildCount());
    }
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return ((Activity)object).getWindow().getDecorView() == view;
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @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
     */
    public long getItemId(int position) {
        return position;
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值