之前在使用viewpager和Tablayout的时候,都是在主页面new一个或者是两个fragment,这样使得主页面的代码看起来不仅比较臃肿,而且相对比较复杂。
思路:将数据源传到适配器中,在getItem方法中根据后台返回的值去new fragment。比较简单,
注意:当一个fragment中放不同的数据源的时候,不需要我们去判断,只要给后台传值即可。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_ai_baike); ButterKnife.bind(this); // initSetTop(); initTabData(); }
private void initTabData() { RequestUtil.tabLayoutData(new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { LogUtils.e(""+jsonObject.toString()+""); Gson gson = new Gson(); TabData tabData = gson.fromJson(jsonObject.toString(), TabData.class); if (tabData.getCode()==1&&tabData.getData()!=null){ //Tablayout中数据源的个数 myTabLayout.setxTabDisplayNum(5); //适配器 adapater = new VPAdapater(getSupportFragmentManager(),tabData.getData()); myViewPager.setAdapter(adapater); //默认的加载viewpager的个数 myViewPager.setOffscreenPageLimit(5); //Tablayout和ViewPager的联动 myTabLayout.setupWithViewPager(myViewPager); //默认选中的viewpager myViewPager.setCurrentItem(1); }else { Toast.makeText(NewAiBaikeActivity.this,tabData.getMsg(),Toast.LENGTH_LONG).show(); } }
适配器中的代码
public class VPAdapater extends FragmentPagerAdapter { private List<TabData.DataBean> mList; public VPAdapater(FragmentManager supportFragmentManager, List<TabData.DataBean> data) { super(supportFragmentManager); mList = data; } //在这个方法中new fragment @Override public Fragment getItem(int position) { if (1==mList.get(position).getStyleType()){ return new SiftFragment(); }else { OtherFragment otherFragment = new OtherFragment(); Bundle bundle = new Bundle(); bundle.putInt(NewAiBaikeActivity.MANY_DATA,mList.get(position).getAibaikeID()); otherFragment.setArguments(bundle); return otherFragment; } } @Override public int getCount() { if (mList!=null){ return mList.size(); }else { return 0; } } //给TabLayout中设置数据源 @Override public CharSequence getPageTitle(int position) { return mList.get(position).getTypeName(); } }