前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android-Fragment-hide和show

android-Fragment-hide和show

作者头像
圆号本昊
发布2021-09-24 12:21:10
1.1K0
发布2021-09-24 12:21:10
举报
文章被收录于专栏:github@hornhuang

为了节约资源,现在很多 app 采用了 replace() 方法来实现碎片的切换,但是在这种情宽下,如果不讲之前的碎片雅茹栈中,就无法避免之前碎片回随之销毁,所以我们采用 hide() 和 show() 方法来实现碎片的切换。

实现效果

效果图项目地址--https://github.com/FishInWater-1999/android-SignInSystem


这里不讲废话直接给出最佳方案

首先,定义四个成员

代码语言:javascript
复制
private Fragment mContent = new Fragment();// 记录下当前碎片 由于替换

private Fragment mPerson;
private Fragment mRanking;
private Fragment mSummary;
private FragmentTransaction transaction;

其次,在 OnCreate() 方法中,对他们进行初始化

代码语言:javascript
复制
mPerson = new Personal();
mRanking = new Ranking();
mSummary = new Summary();
fragmentManager = getSupportFragmentManager();
mContent = mRanking;
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.fragment, mContent).commit();
navigation.setSelectedItemId(R.id.navigation_home);

最后,在按钮点击时调用

代码语言:javascript
复制
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                switchContent(mPerson);
                return true;
            case R.id.navigation_dashboard:
                switchContent(mRanking);
                return true;
            case R.id.navigation_ranking:
                switchContent(mSummary);
                return true;
        }
        return false;
    }
};
代码语言:javascript
复制
    private void switchContent(Fragment to) {
        if (mContent != to) {
            FragmentTransaction transaction = fragmentManager.beginTransaction();
            if (!to.isAdded()) { // 判断是否被add过
                // 隐藏当前的fragment,将 下一个fragment 添加进去
                transaction.hide(mContent).add(R.id.fragment, to).commit();
            } else {
                // 隐藏当前的fragment,显示下一个fragment
                transaction.hide(mContent).show(to).commit();
            }
            mContent = to;
        }

    }

完整代码地址 --> 

点击跳转-- https://github.com/FishInWater-1999/android-SignInSystem/blob/master/app/src/main/java/com/example/joker/signinsystem/activities/MainActivity.java

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现效果
  • 这里不讲废话直接给出最佳方案
  • 完整代码地址 --> 
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档