viewpager和tablayout联合起来使用可以实现顶部或者底部导航栏的实现
packagecom.itheima.jdmall.MyFragment;
importandroid.os.Bundle;
importandroid.support.annotation.Nullable;
importandroid.support.design.widget.TabLayout;
importandroid.support.v4.app.Fragment;
importandroid.support.v4.view.ViewPager;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importcom.itheima.jdmall.R;
importcom.itheima.jdmall.adapter.RegisterAdapter;
importcom.itheima.jdmall.fregment.BaseFragment;
importjava.util.ArrayList;
importjava.util.List;
/**
* Created by albus on 2017/2/12.
*/
public classFirstFragmentextendsBaseFragment {
privateTabLayouttab_FindFragment_title;//定义TabLayout
privateViewPagervp_FindFragment_pager;//定义viewPager
privateRegisterAdapterfAdapter;//定义adapte
privateListlist_fragment;//定义要装fragment的列表
privateListlist_title;//装tab文字的容器
privateLoginFragmentmLoginFragment;
privateRegisterFragmentmRegisterFragment;
@Nullable
@Override
publicView onCreateView(LayoutInflater inflater,@NullableViewGroup container,@NullableBundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_first,container,false);
initControls(view);
returnview;
}
@Override
public intgetLayoutResId() {
return0;
}
private voidinitControls(View view) {
//寻找tablayout和Viewpager的id
tab_FindFragment_title= (TabLayout) view.findViewById(R.id.tab_FindFragment_title);
vp_FindFragment_pager= (ViewPager)view.findViewById(R.id.vp_FindFragment_pager);
//初始化fragment
mLoginFragment=newLoginFragment();
mRegisterFragment=newRegisterFragment();
//将fragment添加 到集合中
list_fragment=newArrayList<>();
list_fragment.add(mLoginFragment);
list_fragment.add(mRegisterFragment);
//将标签的文字添加到集合中
list_title=newArrayList<>();
list_title.add("登录");
list_title.add("注册");
tab_FindFragment_title.setTabMode(TabLayout.MODE_FIXED);
tab_FindFragment_title.addTab(tab_FindFragment_title.newTab().setText(list_title.get(0)));
tab_FindFragment_title.addTab(tab_FindFragment_title.newTab().setText(list_title.get(1)));
fAdapter=newRegisterAdapter(getChildFragmentManager(),list_fragment,list_title);
vp_FindFragment_pager.setAdapter(fAdapter);
tab_FindFragment_title.setupWithViewPager(vp_FindFragment_pager);
}
}
这上面就是整个fragment的写法 可以根据自己的需求做更改
上面为fragment的布局文件
packagecom.itheima.jdmall.adapter;
importandroid.support.v4.app.Fragment;
importandroid.support.v4.app.FragmentManager;
importandroid.support.v4.app.FragmentPagerAdapter;
importjava.util.List;
/**
* Created by albus on 2017/2/7.
*/
public classRegisterAdapterextendsFragmentPagerAdapter{
privateListLlist_fragment;//fragment列表
privateListlist_Title;
通过构造方法传过来fragment中的数据 对adapter进行设置
publicRegisterAdapter(FragmentManager fm, List list_fragment,List list_title) {
this(fm);
this.Llist_fragment= list_fragment;
this.list_Title=list_title;
}
publicRegisterAdapter(FragmentManager fm){
super(fm);
}
@Override
publicFragment getItem(intposition) {
//这里和List view是一样的
returnLlist_fragment.get(position);
}
@Override
public intgetCount() {
返回的是tab数据的多少或者说,你需要几个页面这里就返回几个数据
returnlist_Title.size();
}
//此方法用来显示tab上的名字
@Override
publicCharSequence getPageTitle(intposition) {
returnlist_Title.get(position %list_Title.size());
}
}
上面为adapter的写法
这其中可能会出现一些小问题 ,比如说当你使用androidstudio时,他会有一个butterknife可以带替findviewbyid 但在这里使用时可能会出现空指针异常 没关系 你将这个butterknife绑定的id去掉改成findviewbyid应该就不会出现这个问题了 我使用时暂时就发现了这一个问题
有不懂的欢迎加QQ740894123 一起交流学习 本人正在向乞討在路上奔走中