管理 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;
}
}