xml:
<android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorColor="#666666" app:tabSelectedTextColor="@color/es_r" app:tabTextColor="@color/font_dark" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
java中使用
private void initView() { mTabLayout.addTab(mTabLayout.newTab() ); mTabLayout.addTab(mTabLayout.newTab()); mTabLayout.addTab(mTabLayout.newTab() ); ArrayList<Fragment> list = new ArrayList<>(); list.add(new MyNoticeFragment()); list.add(myReportFragment); list.add(new MyRecordFragment()); mAdapter = new MainPagerAdapter(getSupportFragmentManager(),list); mViewPager.setAdapter(mAdapter); //官方推荐的绑定ViewPager方式 mTabLayout.setupWithViewPager(mViewPager); //手动 添加标题 必须在 setupwidthViewPager 之后 否则不行 mTabLayout.getTabAt(0).setText("通知"); mTabLayout.getTabAt(1).setText("我的上报"); mTabLayout.getTabAt(2).setText("我的"); // }
解决数据刷新的 baseadapter
public abstract class BaseFragmentPagerAdapter extends FragmentPagerAdapter { private FragmentManager mFragmentManager; private List<String> tagList = new ArrayList<String>(); public BaseFragmentPagerAdapter(FragmentManager fm) { super(fm); this.mFragmentManager = fm; } @Override public Object instantiateItem(ViewGroup container, int position) { tagList.add(makeFragmentName(container.getId(), getItemId(position))); return super.instantiateItem(container, position); } @Override public void destroyItem(ViewGroup container, int position, Object object){ super.destroyItem(container, position, object); tagList.remove(makeFragmentName(container.getId(), getItemId(position))); } private static String makeFragmentName(int viewId, long id) { return "android:switcher:" + viewId + ":" + id; } public void update(int position){ Fragment fragment = (Fragment)mFragmentManager.findFragmentByTag(tagList.get(position)); if(fragment == null){ return; } if(fragment instanceof UpdateAble){//这里唯一的要求是Fragment要实现UpdateAble接口 ((UpdateAble)fragment).update(); } } public interface UpdateAble { public void update(); } }
使用 adapter
//ViewPager适配器 10个Fragment private class MainPagerAdapter extends BaseFragmentPagerAdapter { ArrayList<Fragment> mList; public MainPagerAdapter(FragmentManager fm, ArrayList<Fragment> list) { super(fm); mList = list; } @Override public Fragment getItem(int position) { return mList.get(position); } @Override public int getCount() { return mList.size(); } }
子页面fragmeng 继承刷新接口
public class MyReportFragment extends Fragment implements BaseFragmentPagerAdapter.UpdateAble{
initOffLineData();
}