含ViewPager的父activity更新ViewPager中的activity思考


总体思路:在子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 ;  
             }  
         }  
   
因为在给ViewPager设定Adapter时已经使用
代码片段,双击复制
 
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 必须一致。不然容易引起异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值