1.回顾
上篇 使用了 PagerAdapter实现 ViewPager
2.重点
(1)FragmentPagerAdapter 实现 ViewPager
(2)FragmentStatePagerAdapter 实现 ViewPager
(3)操作 Viewpager上的页面
3.说明
(1) PagerAdapter 数据源 List<View>
(2)FragmentPagerAdapter 数据源 List<Fragment> :
这种方式 将 fragment 全部加载到页面里了,操作的Activity 需要 继承 FragmentActivity
(3)FragmentStatePagerAdapter 数据源 List<Fragment>
4.FragmentPagerAdapter 实现 ViewPager
4.1 效果图
4.2 Activity 实现
注意 ,使用 fragment实现 ,Activity 不是 继承 Activity 了,而是 继承 FragmentActivity !!!
Activity 布局文件 : 实现 viewpager 布局:
<android.support.v4.view.ViewPager
android:layout_marginTop="20dp"
android:id="@+id/frag_viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<android.support.v4.view.PagerTabStrip
android:id="@+id/page_tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
>
</android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
4.3 adapter实现
注意 需要 继承的是 FragmentPagerAdapter 而不是 PagerAdapter
package com.example.Adapter;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class FragvpAdapter extends FragmentPagerAdapter {
/*
* 注意 使用的时候 ,activity 不是 继承Activity 而是 继承 FragmentActivity
*/
private List<Fragment> frags;
private List<String> titles;
public FragvpAdapter(FragmentManager fm,List<Fragment> frags,List<String> titles) {
super(fm);
//构造方法初始化
this.frags=frags;
this.titles=titles;
}
@Override
public Fragment getItem(int arg0) {
//item
return frags.get(arg0);
}
@Override
public int getCount() {
// 长度
return frags.size();
}
@Override
public CharSequence getPageTitle(int position) {
// 添加标题
return titles.get(position);
}
}
4.4 新建 4个 Fragment
继承自 Fragment ; 可以看博客:
每个 Fragment,都是 一个ViewPager页面,可以通过 Fragment 实现 没有 ViewPager页面控件控制和 业务实现;
package com.example.fragment;
import com.example.studydemo1.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class Fragment1 extends Fragment {
private Button btn_one_pager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view=inflater.inflate(R.layout.viewpager1, container,false);
btn_one_pager=(Button) view.findViewById(R.id.btn_one_pager);
btn_one_pager.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "VerpagerTestActivity 执行了",Toast.LENGTH_SHORT).show();
}
});
return view;
}
}
4.5 Activity 业务实现
这里实现了OnPagerChangeListener ;实现监听页面切换;
package com.example.studydemo1;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.example.Adapter.FragvpAdapter;
import com.example.fragment.Fragment1;
import com.example.fragment.Fragment2;
import com.example.fragment.Fragment3;
import com.example.fragment.Fragment4;
import com.example.studydemo1.ViewPager1Activity.btn_one_pagerClickListener;
public class FragvpagerActivity extends FragmentActivity {
private ViewPager frag_viewpager;
//这里定义 可以设置样式
private PagerTabStrip page_tabs;
//标题数据源
private List<String> titles;
//Fragment 数据源
private List<Fragment> frags;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragvpager);
frag_viewpager=(ViewPager) findViewById(R.id.frag_viewpager);
page_tabs=(PagerTabStrip) findViewById(R.id.page_tabs);
//准备 标题数据源
titles=new ArrayList<String>();
titles.add("第一页面");
titles.add("第二页面");
titles.add("第三页面");
titles.add("第四页面");
//准备页面数据源
frags=new ArrayList<Fragment>();
frags.add(new Fragment1());
frags.add(new Fragment2());
frags.add(new Fragment3());
frags.add(new Fragment4());
//准备适配器
FragvpAdapter fragvpAdapter=new FragvpAdapter(getSupportFragmentManager(), frags, titles);
//添加适配
frag_viewpager.setAdapter(fragvpAdapter);
frag_viewpager.setOnPageChangeListener(new pagerChangerListener());
}
class pagerChangerListener implements OnPageChangeListener{
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
//第几个 页面
Toast.makeText(getApplicationContext(), "当前第"+arg0+"界面",Toast.LENGTH_SHORT).show();
}
}
}
4.6 注意
在使用 FragmentPagerAdapter 实现的时候,是直接将所有的 Fragment 加载到了 Activity ; 没有动态添加页面和销毁页面;
5.FragmentStatePagerAdapter 实现 ViewPager
FragmentStatePagerAdapter 实现;和FragmentPagerAdapter 实现 基本上 一样:
使用方法:
FragmentStatePagerAdapter
(2)重写 instantiateItem(ViewGroup arg0, int arg1) 方法
(3)重写 destroyItem(ViewGroup container, int position, Object object) 方法
例子:
(4)已三个一组加载 页面 和 pagerAdapter 这一点一样
package com.example.Adapter;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;
public class FragStatevpAdapter extends FragmentStatePagerAdapter {
private List<Fragment> frags;
private List<String> titles;
public FragStatevpAdapter(FragmentManager fm,List<Fragment> frags,List<String> titles) {
super(fm);
this.frags=frags;
this.titles=titles;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return frags.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return frags.size();
}
/**
* 创建
* 不需要改写
*/
@Override
public Object instantiateItem(ViewGroup arg0, int arg1) {
// TODO Auto-generated method stub
return super.instantiateItem(arg0, arg1);
}
/**
* 销毁
* 不需要改写
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}
/**
* 标题
*/
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titles.get(position);
}
}
6.总结
每个 Fragment,都是 一个ViewPager页面,可以通过 Fragment 实现 没有 ViewPager页面控件控制和 业务实现;
(2)总的来说 ,到此为止,一共学习了 6个 adapter : SimpleAdapter , ArrayAdapter , BaseAdapter , PagerAdapter ,FragmentPagerAdapter 和 FragmentStatePagerAdapter
7.demo 免积分下载