使用的ViewPager是android.support.v4.包下的。
demo one:
基本的逻辑思路:
在布局文件中创建布局文件并添加ViewPager
上例中只简单的显示图片,所以ViewPager中直接 使用Imageview控件。创建一个集合用于保存在ViewPager中用到的Imageview,初始化时
new Imageview 并添加到集合中以供在ViewPager中使用,准备适配器使用继承PagerAdapter,其中自动生成两个抽象方法需要重写。另外需要手动添加
两个非抽象方法public void destroyItem(ViewGroup container, int position, Object object)此方法是当页面销毁时调用, 以及public Object instantiateItem(ViewGroup container, int position)此方法当页面缓存时调用。实现图片的轮播启动一个工作线程,在此线程中执行耗时操作休眠,然后通过消息发送传递给主线程,在主线程中执行
ViewPager的setCurrentItem()方法更新界面。
Fragment就是通常所说的碎片,是现在比较流行的一种功能。使用时可以将其比作一个Activity。一般创建一个新的碎片继承Fragment,并重写其中的onCreatView方法,
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 得到视图
View v=inflater.inflate(R.layout.two_f, null);
return v;
}
在这个方法中得到视图 ,其中的第一个参数是一个页面布局,布局中可以添加你想要的控件等等。
import android.os.Bundle;
import android.view.View;
import android.app.Activity;
public class MainActivity extends Activity {
//准备碎片管理器
private android.app.FragmentManager man;
//准备碎片的处理事务
private android.app.FragmentTransaction tra;
OneFragmnet one;
TwoFragmnet two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//创建切换碎片的对象
one =new OneFragmnet();
two =new TwoFragmnet();
//管理器
man=getFragmentManager();
//事务初始化
tra=man.beginTransaction();
tra.replace(R.id.fl, one);
//事务使用时候如何执行
tra.commit();
}
public void doClick(View v){
switch (v.getId()) {
case R.id.button1:
tra=man.beginTransaction();
tra.replace(R.id.fl, one);
break;
case R.id.button2:
tra=man.beginTransaction();
tra.replace(R.id.fl, two);
break;
}
tra.commit();
}
}
在这里我们要使用到FragmentManager这个管理者和FragmentTransaction这个处理事务。而同时在Activity的布局文件中使用了Framelayout,作为
Fragment的载体。
下面我们来说说ViewPager与Fragment的连用:
基本思路是将ViewPager作为容器,将碎片添加到容器中。
注意这里为ViewPager配置的适配器不再是PagerAdapter而是FragmentPagerAdapter了。
public class MainActivity extends FragmentActivity {
//用于存储切换的碎片
private List<Fragment> list=new ArrayList<Fragment>();
//准备适配器
private FragmentPagerAdapter adapter;
private ViewPager mVp;
private RadioGroup mRg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
setAdapter();
Linten();
}
/**
* 处理初始化相关问题
*/
public void init(){
HotFragment hot=new HotFragment();
NewFragment ne=new NewFragment();
//数据的添加
list.add(hot);
list.add(ne);
mVp=(ViewPager) findViewById(R.id.vp);
mRg=(RadioGroup) findViewById(R.id.rg);
}
/**
* 处理适配器绑定
*/
public void setAdapter(){
//通过内部类形式获取适配器
adapter=new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return list.size();
}
@Override
public Fragment getItem(int arg0) {
return list.get(arg0);
}
};
mVp.setAdapter(adapter);
}
/**
* 处理监听事件
*/
public void Linten(){
//radio按钮监听
mRg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb_hot:
mVp.setCurrentItem(0);
break;
case R.id.rb_new:
mVp.setCurrentItem(1);
break;
}
}
});
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
} //hushi
@Override
public void onPageScrollStateChanged(int arg0) {
//hushi
}
});
}
//采用继承类方式获得适配器
// class myFr extends FragmentPagerAdapter{
//
// public myFr(FragmentManager fm) {
// super(fm);
// // TODO Auto-generated constructor stub
// }
//
// @Override
// public Fragment getItem(int arg0) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public int getCount() {
// // TODO Auto-generated method stub
// return 0;
// }
//
// }
}
这里的Activity是继承自FragmentActivity,我们需要创建一个集合来储存Fragment,为ViewPager配置适配器来显示Fragment。在适配器中
重写抽象方法即可。另外还添加了RadioButton的监听事件。这个只是随便添加的啦,哈哈。
另另外,
//viewpager添加监听
mVp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
switch (arg0) {
case 0://切的热歌
mRg.check(R.id.rb_hot);
break;
case 2://切的新歌
mRg.check(R.id.rb_new);
break;
}
}
这里是为ViewPager配置了监听,当当前的ViewPager上的碎片Fragment改变时,相应的Radiobutton会被随之选中。