Android应用中使用ViewPager实现类似QQ的界面切换效果

2019-12-10 18:38:18丽君

 

代码解读:
1、在上面重写了PagerAdapter,在里面最重要的方法就是

@Override 
    public Object instantiateItem(View container, int position) { 
      // TODO Auto-generated method stub 
      ((ViewPager)container).addView(mList.get(position), 0); 
      return mList.get(position); 
    }  

具体为什么每次都是addView到0的位置,目前我还不知道,这个也是从网上找了一个方法看到的。

2、在初始化List的时候,里面包含的内容是一个个的View元素,在我的了解范围内有两种方法
第一种就是通过添加Window的getDecorView()来得到一个View;
第二种就是通过LayoutInflater,从xml中生成一个View。
需要注意的是,第一种方法,需要主类继承自ActivityGroup,这样才能在添加时使用getLocalActivityManager以及之后的方法,需要生成的Activity,例如本例中的Layout1Activity,要在AndroidManifest.xml中声明。

/** 
 * 添加进来三个界面到List,用于初始化PagerAdapter 
 */ 
list = new ArrayList<View>(); 
list.add(this.getLocalActivityManager().startActivity("layout1", new Intent(ViewpagerActivity.this, Layout1Activity.class)).getDecorView()); 
list.add(mInflater.inflate(R.layout.layout2, null)); 
list.add(mInflater.inflate(R.layout.layout3, null)); 

3、如果只是从xml生成View来添加的话,完全可以移除继承ActivityGroup。
4、如果使用startActivity的方法来启动,需要添加进来的几个Activity,是一起在加入时就初始化的,可以通过在onCreate()方法中打LOG看出来。

PS:如何解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
具体讲解如下:
Google在Android 3.0SDK中推出的ViewPager控件很大程度上满足了开发者开发页面左右移动切换的功能,使用非常方便。但是使用中发现,在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。