ViewPager和fragment的使用

此效果是做一个viewPager里面嵌套fragment,同时viewpager有标题行可以进行点击,每个fragment里面显示TextView。通过设置不同的背景颜色区分。
红色的表示注释
(1)布局文件
<!-- viewPager是一定要设置id的。 -->
//因为viewpager是子类,所有ViewGroup可以直接写在外面,如果viewPager外面的布局什么都不写,则默认外面有个
// frameLayout 布局,记住Viewpager一定要设置id.因为源码的某个地方需要getId
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    <android.support.v4.view.PagerTabStrip
        android:id="@+id/pts"
        android:layout_width="match_parent"
        android:layout_height="30dp" />
</android.support.v4.view.ViewPager>
(2)写fragment
源码如下:记得继承Fragment
public class ContentFragment extends Fragment {
    //声明一个常量,作用是为了取得activity传过来的值。
private static final String COLOR = "color_key";
//用来确定北京颜色为什么
private int colorString;
//声明一个随机数
private Random rnd = new Random();
    //通过此方法返回一个fragment,记得return一定要返回对象,最容易在此地方返回值为null了,记得修改一下。否则
//容易报空指针异常,并且不提示在代码的第几行。
public static ContentFragment getFragment(Integer color) {
ContentFragment cf = new ContentFragment();
if (color != null) {

Bundle data = new Bundle();
data.putInt(COLOR, color);
cf.setArguments(data);
}

return cf;

}

@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//得到activity传过来的值
Bundle dataBundle = getArguments();
//判断得到的值是否由内容
if (dataBundle != null) {
//如果不为空,得到activity传过来的背景颜色为多少
colorString = dataBundle.getInt(COLOR);
} else {
//如果activity没有传过来背景颜色为什么,那就随机生成一个颜色。此颜色的意思是用rgb表示,每一个都用2位的16
进//值书表示,即为8为2进值书,因为一个16为为4个2数。0x表示16进值,00表示透明,ff表示最大为255,加1表示因为左//边闭合右边开区间,需要加+1,然最后的255能取到,因为00表示透明了,所有或上0xFF00000,00透明或上ff不透//明,就会变成不透明,因为1|0=1,所有就为不透明的颜色了
colorString = rnd.nextInt(0x00FFFFFF + 1) | (0xff000000);
}
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//这里动态生成一个textView
return new TextView(getActivity(), null, 0);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
//给生成的textView设置背景色
view.setBackgroundColor(colorString);
}
}
(3)activity写法
//让此activity继承FragmentActivity
public class MainActivity extends FragmentActivity {
//声明view控件
private ViewPager vp;
private PagerTabStrip pts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//根据布局文件得到相应的id,一个为ViewPager,一个为PagerTabStrip。这个现实什么内容由 下面的getPageTitle方法绝对。
vp = (ViewPager) findViewById(R.id.vp);
pts = (PagerTabStrip) findViewById(R.id.pts);
//设置viewpager标题的滑动下面的下划线颜色。
pts.setTabIndicatorColor(Color.BLUE);
// vp.setAdapter(new MyAdapter(getSupportFragmentManager()));
//声明一个adaper
MyAdapter adapter = new MyAdapter(getSupportFragmentManager());
//给Viewpager设置adapter
       vp.setAdapter(adapter);
vp.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(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 onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
switch (state) {
case ViewPager.SCROLL_STATE_SETTLING:
break;
}

}
});
}
//写一个adapter继承自fragmentPagerAdapter,这里也可以继承FragmentStatePagerAdapter。区别在与后面的这个就算滑出屏幕外面也不会销毁
class MyAdapter extends FragmentPagerAdapter {
//创建一个list,泛型为Fragment
private List<Fragment> frags;
//构造函数
public MyAdapter(FragmentManager fm) {
super(fm);
//实例化list
frags = new ArrayList<Fragment>();
//先构建每一个fragment把得到的每一个fragment存放到list里面
frags.add(ContentFragment.getFragment(Color.RED));
frags.add(ContentFragment.getFragment(Color.BLUE));
frags.add(ContentFragment.getFragment(Color.YELLOW));
frags.add(ContentFragment.getFragment(Color.GREEN));
}
//根据id得到当前的fragment为那个
@Override
public Fragment getItem(int arg0) {
return frags.get(arg0);
}
//得到list里面fragment的个数
@Override
public int getCount() {
return frags.size();
}
//此方法是为viewPager上面滑动的标题写的内容,
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "红色";
case 1:
return "绿色";
case 2:
return "黄色";
case 3:
return "蓝色";
}
return super.getPageTitle(position);
}
}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值