java - TabLayout如何在选择时再进行加载

 liyanyl_499 发布于 2022-10-29 20:25

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 List mTabs = 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;
    }
}
3 个回答
  • 楼上正解,用viewpager配合fragment可以很容易的做到这点

    2022-10-31 17:47 回答
  • 监听TabLayout的选择事件,根据事件响应创建相应的fragment。在相应的fragment实现相应的数据加载。

    2022-10-31 17:48 回答
  • 推荐你使用tablayout + viewpager +fragment 做布局,然后再设置viewpager的懒加载机制
    ViewPager缓存机制

    2022-10-31 17:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有