总体思路:在子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 必须一致。不然容易引起异常。
本文探讨如何在ViewPager的父Activity中管理子Activity的生命周期,通过自定义`invisibleOnScreen`和`goneOnScreen`方法模拟`onResume`和`onPause`。在Adapter的`instantiateItem`中绑定子Activity的点击事件,并强调了在Adapter构造函数中传递Context的重要性,以及在`instantiateItem`中使用switch case与View列表同步的注意事项。
1万+

被折叠的 条评论
为什么被折叠?



