Viewpager+Fragment
使用步骤:
一.导入jar包
android-support-v4.jar
二.Activity布局
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:flipInterval="3000"à动画效果
android:persistentDrawingCache="animation"/>à内存设置
三.Activity代码
继承FragmentActivity
1.变量
1. .选项卡及数组
private RelativeLayout mTab1;
private RelativeLayout mTab2;
private RelativeLayout mTab3;
private RelativeLayout mTab4;
privateRelativeLayout[] arrBtn = new RelativeLayout[4];
2.滑动页容器
ViewPagerviewPager;
3.碎片集合
private List<BaseFragment>fragments;à创建碎片的父类
// 碎片对象
private BaseFragment m1 =null;
private BaseFragment m2 =null;
private BaseFragment m3 =null;
private BaseFragment m4 =null;
4.碎片适配器
private MyFragmentAdapteradapter;à创建碎片适配器
2.onCreate()
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initListener();
//设置初始值
viewPager.setCurrentItem(0);
setColor(0);
}
3.封装的方法
(1)initView()
private void initView() {
mTab1 = (RelativeLayout)findViewById(R.id.btn1);
mTab2 = (RelativeLayout)findViewById(R.id.btn2);
mTab3 = (RelativeLayout)findViewById(R.id.btn3);
mTab4 = (RelativeLayout)findViewById(R.id.btn4);
//把选项卡添加到数组中
arrBtn[0] = mTab1;
arrBtn[1] = mTab2;
arrBtn[2] = mTab3;
arrBtn[3] = mTab4;
//滑动页容器
viewPager = (ViewPager)findViewById(R.id.vp);
}
(2)initData()
private void initData() {
// 准备碎片
m1 = new ListFragment();
m2 = new ListFragment();
m3 = new ListFragment();
m4 = new OptionFragment();
// 官方存值
Bundle b1 = new Bundle();
b1.putString("key","image");
m1.setArguments(b1);
Bundle b2 = new Bundle();
b2.putString("key","audio");
m2.setArguments(b2); -------------------------------à放入参数
Bundle b3 = new Bundle();
b3.putString("key","video");
m3.setArguments(b3);
// 非官方
m1.setList(MediaUtils.getImageList(this));
m2.setList(MediaUtils.getAudioList(this));
m3.setList(MediaUtils.getVideoList(this));
//把碎片添加到碎片集合中去
fragments = new ArrayList<BaseFragment>();
fragments.add(m1);
fragments.add(m2);
fragments.add(m3);
fragments.add(m4);
// 实例化适配器
adapter = new MyFragmentAdapater(getSupportFragmentManager());àFragment Activity关联
adapter.setFragments(fragments);// 添加数据
viewPager.setAdapter(adapter);// 关联适配器
}
(3)initListener()
private void initListener() {
// 添加按钮的监听
for (int i = 0; i <arrBtn.length; i++) {
arrBtn[i].setOnClickListener(this);
}
// 添加滑动页的监听
viewPager.setOnPageChangeListener(this);
}
4.事件回调函数
(1)单击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
viewPager.setCurrentItem(0);// 第一页
break;
case R.id.btn2:
viewPager.setCurrentItem(1);// 第二页
break;
case R.id.btn3:
viewPager.setCurrentItem(2);// 第二页
break;
case R.id.btn4:
viewPager.setCurrentItem(3);// 第二页
break;
default:
break;
}
}
(2)滑动事件
@Override
public void onPageScrolled(inti, float v, int i2) {
// 滑动过程中...(写动画)
}
@Override
public voidonPageSelected(int i) {
// 核心事件
//页面被选中(当前页面已经显示了90%的面积)
setColor(i);
}
@Override
public voidonPageScrollStateChanged(int i) {
// 滑动的状态改变
}
(3)设置选项卡变色
/**
* 1.将所有的背景统一颜色
* 2.将当前选中的背景设置特殊颜色
* @param index
*/
public void setColor(int index){
for (int i = 0;i<arrBtn.length; i++){
arrBtn[i].setBackgroundColor(Color.BLUE);
}
arrBtn[index].setBackgroundColor(Color.GREEN);// 特殊
}
(三)创建碎片的子类
public class ListFragmentextends BaseFragment {
@Override
public View onCreateView(LayoutInflaterinflater,// 反射器
ViewGroupcontainer, //容器对象(没用)
BundlesavedInstanceState) {// 保存状态的对象(没用)
// 反射视图
View view =inflater.inflate(R.layout.fragment_list, container, false);
// 获取参数值
Bundle b = getArguments();
String s =b.getString("key");
lv = (ListView)view.findViewById(R.id.lv);
adapter = newMyAdapter(getActivity());
getData(s);// 拿数据
return view;
}
MyAdapter adapter;
ListView lv;
private void getData(String s){
adapter.setList(list);
lv.setAdapter(adapter);
}
}
四.其他类
public class BaseFragmentextends Fragment {
publicList<MediaUtils.MediaInfo> list;
public voidsetList(List<MediaUtils.MediaInfo> list) {
this.list = list;
}
}
public class MyFragmentAdapterextends FragmentPagerAdapter {
privateList<BaseFragment> fragments;
/**
* 构造器
* 碎片管理器
* @param fm
*/
publicMyFragmentAdapter(FragmentManager fm) {
super(fm);
}
public voidsetFragments(List<BaseFragment> fragments) {
this.fragments = fragments;
}
/**
* (滑动时)返回碎片对象
*
* @param i
* @return
*/
@Override
public Fragment getItem(int i){
returnfragments.get(i);
}
@Override
public int getCount() {
return fragments.size();
}
}
创建碎片
public class ListFragmentextends BaseFragment {
List<MediaUtil.MediaInfo> list;---------------à可以在BaseFragment声明,这里就不用声明了
MyAdapter adapter;
ListView listView;
//fragment布局对象
View view;
@Override
public ViewonCreateView(LayoutInflater inflater, ViewGroup container,
BundlesavedInstanceState) {
//反射视图
view =inflater.inflate(R.layout.fragment_list, container, false);
//获取参数值
Bundle bundle = getArguments();----------------à获得参数
//判断条件
String condition =bundle.getString("key");
initView();
initData(condition);
return view;
}
private void initView() {
listView = (ListView) view.findViewById(R.id.lv);
adapter = newMyAdapter(getActivity());
}
private void initData(Stringcondition) {
//图片
if(condition.equals("image")) {
list =MediaUtil.getImageList(getActivity());
}
//音频
if (condition.equals("audio")){
list =MediaUtil.getAudioList(getActivity());
}
//视频
if(condition.equals("video")) {
list =MediaUtil.getVideoList(getActivity());
}
adapter.setList(list);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
碎片基类
public class BaseFragmentextends Fragment {
publicList<MediaUtil.MediaInfo> list;
public voidsetList(List<MediaUtil.MediaInfo> list) {
this.list = list;
}
}