总体思路:在子activity加上两个函数模拟生命周期onVissible和onInvissible,在母页里面回调
思考一:
自定义方法来模拟Activity的onResume和onPause,然后在ViewPager所在的父Activity中手动调用子Activity中自定义的伪生命周期方法。
子:
public void invisibleOnScreen(){
log.d("invisibleOnScreen");
}
public void goneOnScreen(){
log.d("goneOnScreen");
}
父:
@Override
protected
void
onResume() {
super
.onResume();
log.d(
"onResume"
);
mActivityManager.dispatchResume();
if
(mViewPager !=
null
){
switch
(mViewPager.getCurrentItem()) {
case
0
:
Activity _activity = mActivityManager.getActivity(A);
if
(_activity !=
null
&& _activity
instanceof
MyActivity){
((MyActivity)_activity ).invisibleOnScreen();
}
break
;
default
:
break
;
}
}
}
mActivityManager.startActivity(tag, intent).getDecorView()
|
来给每个子Activity设置tag了,所以可以直接用
mActivityManager.getActivity(A);
|
在子类的控件中绑定刷新事件,在instantiateItem中执行刷新。eg:botton.click()
开发的要点在于ViewPager的适配器PagerAdapter 一般新建一个类 继承PagerAdapter 里面有一个方法instantiateItem 复写该方法。
上代码: 走你~
/**
* ViewPager适配器
*/
public class MyPagerAdapter extends PagerAdapter
{
public List<View> mListViews;
public Context context;
public MyPagerAdapter(List<View> mListViews,Context context) //注意!
{
this.mListViews = mListViews;
this.context=context;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2)
{
((ViewPager) arg0).removeView(mListViews.get(arg1));
}
@Override
public void finishUpdate(View arg0)
{
}
@Override
public int getCount()
{
return mListViews.size();
}
@Override
public Object instantiateItem(View collection, int position)
{
switch (position) {
case 0:
Button test1 = (Button)mListViews.get(0).findViewById(R.id.btn);
test1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "test1", Toast.LENGTH_SHORT).show();
}
});
Button test2 = (Button)mListViews.get(0).findViewById(R.id.btn2);
test2.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "test2", Toast.LENGTH_SHORT).show();
}
});
break;
default:
break;
}
((ViewPager) collection).addView(mListViews.get(position), 0);
return mListViews.get(position);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
return arg0 == (arg1);
}
@Override
public Parcelable saveState()
{
return null;
}
@Override
public void startUpdate(View arg0)
{
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1)
{
// TODO Auto-generated method stub
}
}
其中有两个要点 一定要注意,这也是我与其他网上代码不同的地方。
其一:在MyPagerAdapter的构造方法中 多了一个 Content ,这主要是为了实现一些功能是要基于activity环境,例如Toast。(并非强制 看功能决定)
其二:在instantiateItem中使用了switch方法其中 case的value 必须与mListViews.get(value) 这两个value要一致。因为mListView中存放的是View ,
instantiateItem中参数position 也是指View 两个View 必须一致。不然容易引起异常。