ViewPager可以实现导航,它存在于android的v4包(谷歌公司为了解决系统碎片化所提出来的一个包,可以实现向下兼容)里面,它里面可以盛装view或者fragment对象
实现它的时候需要的适配器是view->pagerAdapter; fragment->fragmentpagerAdapter.代码如下:
pagweadpter适配器如下:
public class MyAdapter extends PagerAdapter { private List<View> viewList; private List<String> nameList; public MyAdapter(List<View> viewList,List<String> nameList) { this.viewList = viewList; this.nameList = nameList; } //返回所有视图的数量 public int getCount() { return viewList.size(); } //判断视图是否由图像产生 @Override public boolean isViewFromObject(View view, Object object) { return view==object; } //创建一个页面 @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); } //毁坏一个页面 @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); } @Override public CharSequence getPageTitle(int position) { return nameList.get(position); } }
同理 fragmentpagerAdapter 如下
/* FragmentPagerAdapter产生的页面在滑动消失后不会有自动创建和销毁的过程,而PagerAdapter 会有。 */ public class MyFragmentAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; private List<String> nameList; public MyFragmentAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> nameList) { super(fm); this.fragmentList = fragmentList; this.nameList = nameList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } @Override public CharSequence getPageTitle(int position) { return nameList.get(position); } }
注意
1.将layout布局转换成view对象有两种方法:
1)LayoutIflater if = getLayoutIflater.form(this);
if.inflat(Resource,root);
2)View view = View.inflat(context,resource,root);
这样就可以轻松的通过layout布局文件获得所需的view组件了。哈哈!
2.至于将layout布局文件转换为fragment对象,可以通过创建一个Myfragment类(注意要继承Fragment),(通过onCreatView(...)方法返回通过布局文件生成的view对象。)哦了!对了,代码如下:
package com.jike.fragment; import android.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by dell on 2016-2-28. */ public class MyFragment2 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment2,container,false); return view; } }
就这么简单!!!
接下来放出主文件:
import android.view.View; import java.util.ArrayList; import java.util.List; import static android.graphics.Color.YELLOW; public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener { private PagerTabStrip tab; private ViewPager pager; private List<View> viewList; private List<android.support.v4.app.Fragment> fragmentList; private List<String> namelist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pager = (ViewPager) findViewById(R.id.pager); viewList = new ArrayList<View>(); namelist = new ArrayList<String>(); View view1 = View.inflate(this,R.layout.view1,null); View view2 = View.inflate(this,R.layout.view2,null); View view3 = View.inflate(this,R.layout.view3,null); View view4 = View.inflate(this,R.layout.view4,null); viewList.add(view1); viewList.add(view2); viewList.add(view3); viewList.add(view4); namelist.add("第一页"); namelist.add("第二页"); namelist.add("第三页"); namelist.add("第四页"); /* pager里是view MyAdapter myAdapter = new MyAdapter(viewList,namelist); pager.setAdapter(myAdapter); */ Fragment frag1 = new Myfragment(); Fragment frag2 = new Myfragment(); Fragment frag3 = new Myfragment(); Fragment frag4 = new Myfragment(); fragmentList = new ArrayList<Fragment>(); fragmentList.add(frag1); fragmentList.add(frag2); fragmentList.add(frag3); fragmentList.add(frag4); tab = (PagerTabStrip) findViewById(R.id.tab); tab.setBackgroundColor(Color.RED); tab.setTextColor(Color.YELLOW); tab.setDrawFullUnderline(false); tab.setTextColor(Color.BLACK); MyFragmentAdapter myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(),fragmentList,namelist); pager.setAdapter(myFragmentAdapter); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }其布局文件为:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--android.support.v4包是为了解决上下兼容问题所做出的包,ViewPager就在这个包内--> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="wrap_content" android:layout_height="wrap_content"> <android.support.v4.view.PagerTabStrip android:id="@+id/tab" android:layout_height="wrap_content" android:layout_width="wrap_content"> </android.support.v4.view.PagerTabStrip> <!-- 和pagertabStrip同样的功能,任选其一 <android.support.v4.view.PagerTitleStrip android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content"> </android.support.v4.view.PagerTitleStrip>--> </android.support.v4.view.ViewPager> </LinearLayout>
解释一下:PaperTabStrip 是实现导航栏组建。