177_PagerSliding项目
PagerSliding项目
我们用一个开源项目PagerSliding
这个其实也是实现了标签和ViewPager的结合
我们之前一直用design包里面的TabLayout
确实很方便
但是有缺陷
就是我们要修改起来其实很麻烦
如果我们用开源项目的话
理解了之后修改源码就比较简单了
我们可以修改成我们自己想要的
给fragment布局
<com.astuetz.PagerSlidingTabStrip
Android:layout_width="match_parent"
android:id="@+id/psts_fragment_main_tab"
android:layout_height="48dp"/>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:id="@+id/vp_fragment_main_content"
android:layout_height="match_parent"/>
我们经常在onCreateView方法里面初始化
但是我喜欢直接把view返回出去
然后我再在onViewCreated方法里面去初始化
都是一样的
这样的话看上去更舒服
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup Container, @Nullable Bundle savedInstanceState) {
return View.inflate(getContext(), R.layout.fragment_main_content, null);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mPsts_tab = (PagerSlidingTabStrip) view.findViewById(R.id.psts_fragment_main_tab);
mVp_content = (ViewPager) view.findViewById(R.id.vp_fragment_main_content);
}
然后我们来个适配器
专门给Fragment和ViewPager用的
class PagerFragmentAdapter extends FragmentStatePagerAdapter {
List<Fragment> mFragments = new ArrayList<>();
public PagerFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
}
然后我们把他们关联起来
1.创建适配器
PagerFragmentAdapter adapter = new PagerFragmentAdapter(getChildFragmentManager());
2.设置适配器
mVp_content.setAdapter(adapter);
3.把tab和viewpager关联起来
mPsts_tab.setViewPager(mVp_content);
然后我们添加Fragment,
adapter要notify一下
tab也要notify一下
然后就是给title标题
代码
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mPsts_tab = (PagerSlidingTabStrip) view.findViewById(R.id.psts_fragment_main_tab);
mVp_content = (ViewPager) view.findViewById(R.id.vp_fragment_main_content);
PagerFragmentAdapter adapter = new PagerFragmentAdapter(getChildFragmentManager());
mVp_content.setAdapter(adapter);
mPsts_tab.setViewPager(mVp_content);
adapter.addFragment(new NewFragment());
}
class PagerFragmentAdapter extends FragmentStatePagerAdapter {
List<Fragment> mFragments = new ArrayList<>();
public PagerFragmentAdapter(FragmentManager fm) {
super(fm);
}
public void addFragment(Fragment fragment) {
mFragments.add(fragment);
notifyDataSetChanged();
mPsts_tab.notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return "标题" + position;
}
}

浙公网安备 33010602011771号