前面探索的没有实现滑动切换fragment,后来经过探索。发现了Viewpager这个控件(容器)
viewpager
ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它:
但是我们重点使用的是:PagerTabStrip
PagerTabStrip
ViewPager用来管理layout并可以左右滑动显示各个页面数据,PagerTabStrip用来显示页面title,android:layout_gravity="top"表示title在顶部,可设置bottom等。
PagerTabStrip是v4支持包里面的类,是ViewPager专用的类,不能在其他地方使用。在使用的时候,我们只需要在ViewPager的布局里面声明即可。
第一步写好布局文件:
主布局文件,viewpager 里面加PagerTabStrip
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.viewpager.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/tabstrip"
android:layout_width="wrap_content"
android:layout_height="50dip"
android:gravity="center" />
</android.support.v4.view.ViewPager>
</LinearLayout>
fragment布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
第二步新建 MyFragment类,继承Fragment
public class MyFragment extends Fragment {
String text;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
TextView txt_content = (TextView) view.findViewById(R.id.text_content);
Bundle args = getArguments();
if (args != null) {
text = args.getString("text");
}
txt_content.setText(text);
return view;
}
}
第三部 绑定Fragment,建立Fragment列表并设定viewpager的适配器。并重写里面的方法。由于加入了PagerTabStrip。
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
为tab添加列表。
MainActivity.class
public class MainActivity extends AppCompatActivity {
private List<Fragment> fragments;
private ViewPager viewPager;
private List<String> titleList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
viewPager = (ViewPager) findViewById(R.id.viewpager);
titleList = new ArrayList<String>();
titleList.add("最新推荐");
titleList.add("游戏娱乐");
titleList.add("影音视频");
fragments = new ArrayList<Fragment>();
MyFragment fg1 = new MyFragment();
Bundle args1 = new Bundle();
args1.putString("text", "第1个Fragment");
fg1.setArguments(args1);
fragments.add(fg1);
MyFragment fg2 = new MyFragment();
Bundle args2 = new Bundle();
args2.putString("text", "第2个Fragment");
fg2.setArguments(args2);
fragments.add(fg2);
MyFragment fg3 = new MyFragment();
Bundle args3 = new Bundle();
args3.putString("text", "第3个Fragment");
fg3.setArguments(args3);
fragments.add(fg3);
FragmentPagerAdapter adapter = new FragmentPagerAdapter(
getSupportFragmentManager()) {
@Override
public int getCount() {
return 3;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
};
viewPager.setAdapter(adapter);
}
}
PS:如果定义的frament是v4下面的fragment 那么其他地方也要引用v4下的fragment。
PagerTitleStrip
两者相同的。只是PagerTabStrip是可交互的,而PagerTitleStrip是不可交互的区别。对于区别在哪些位置,即是上面的两点(是否可点击与下划线指示条)。
这样的话PagerTitleStrip只是标题不能点击,效果还不如前面的PagerTabStrip。
PagerTabStrip在效果上包含了PagerTitleStrip。
演示----略
文末标明参考资料:
使用PagerTabStrip实现绚丽的滑动标签
Android中ViewPager的PagerTabStrip与PagerTitleStrip用法实例
推荐参考博客详解viewpager