TabLayout如何在选择时再进行加载?
写了一个TabLayout,可是在启动应用时就已经将tab下所有标签全部加载完成了,我想实现的是点击某个标签再进行这个标签下fragment的加载,就像知乎一样,请问这个功能该如何实现?
附上
public class MainActivity extends AppCompatActivity { @BindView(R.id.mainLinearLayout) LinearLayout mainLinear; @BindView(R.id.mainContent) FrameLayout mainContent; @BindView(R.id.tabHost) FragmentTabHost tabHost; @BindView(R.id.tabContent) FrameLayout tabContent; private LayoutInflater inflater; //用于装载view private ListmTabs = new ArrayList<>(4); //用于储存每个标签内容 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initBmob(); initTab(); } private void initBmob() { //// 第一:默认初始化 // Bmob.initialize(this, "67d2f18dc98bf4f958229765bc8b0b06"); // 第二:自v3.4.7版本开始,设置BmobConfig,允许设置请求超时时间、文件分片上传时每片的大小、文件的过期时间(单位为秒), BmobConfig config = new BmobConfig.Builder(this) //设置appkey .setApplicationId("67d2f18dc98bf4f958229765bc8b0b06") //请求超时时间(单位为秒):默认15s .setConnectTimeout(30) //文件分片上传时每片的大小(单位字节),默认512*1024 .setUploadBlockSize(1024 * 1024) //文件的过期时间(单位为秒):默认1800s .setFileExpiration(2500) .build(); Bmob.initialize(config); } private void getPermission() { PermissionManager helper; helper = PermissionManager.with(MainActivity.this); //添加权限请求码 // helper.addRequestCode(10) } private void initTab() { //Tab对象 MainTabs tabs1 = new MainTabs("首页", R.drawable.tab_icon_1_selector, Fragment_1.class); MainTabs tabs2 = new MainTabs("记录", R.drawable.tab_icon_2_selector, Fragment_2.class); MainTabs tabs3 = new MainTabs("发现", R.drawable.tab_icon_3_selector, Fragment_3.class); MainTabs tabs4 = new MainTabs("我", R.drawable.tab_icon_4_selector, Fragment_4.class); mTabs.add(tabs1); mTabs.add(tabs2); mTabs.add(tabs3); mTabs.add(tabs4); inflater = LayoutInflater.from(this); //表示主内容的视图为定义的fragment内视图 tabHost.setup(this, getSupportFragmentManager(), R.id.mainContent); //取出每一个,进行设置 for (MainTabs mainTabs : mTabs) { //获取到文字标签 TabHost.TabSpec tabSpec = tabHost.newTabSpec(mainTabs.getTitle()); tabSpec.setIndicator(buildTabs(mainTabs)); tabHost.addTab(tabSpec, mainTabs.getFragment(), null); } // fragmentTabHost.getTabWidget().setShowpiders(LinearLayout.SHOW_pIDER_NONE); //去掉分割线 ? tabHost.setCurrentTab(0); } //传入一个对象,返回一个View private View buildTabs(MainTabs mainTabs) { View view = inflater.inflate(R.layout.tab_indicator, null); ImageView imageView = (ImageView) view.findViewById(R.id.tab_icon); TextView textView = (TextView) view.findViewById(R.id.tab_text); //设置图片和文字 imageView.setBackgroundResource(mainTabs.getIcon()); textView.setText(mainTabs.getTitle()); return view; } }
楼上正解,用viewpager配合fragment可以很容易的做到这点
监听TabLayout
的选择事件,根据事件响应创建相应的fragment
。在相应的fragment
实现相应的数据加载。
推荐你使用tablayout + viewpager +fragment 做布局,然后再设置viewpager的懒加载机制
ViewPager缓存机制