显示/隐藏片段而不是替换

Posted

技术标签:

【中文标题】显示/隐藏片段而不是替换【英文标题】:Show/Hide Fragment instead of replace 【发布时间】:2022-01-06 02:22:07 【问题描述】:

我有 3 个或更多片段,我想用抽屉访问它们。 这样当我点击“个人资料”时,当前片段(即主页)应该隐藏,“个人资料”片段应该显示,反之亦然.. 现在它正在使用“替换片段”但是, 当我点击抽屉按钮时,我不想替换我想显示/隐藏它们。

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    //my coding
    

    replace(new HomeFragment());
    init();


private void init() 
    mDrawer = (FlowingDrawer) findViewById(R.id.drawerlayout);
    iv_Menu = findViewById(R.id.iv_Menu);
    ll_Home = findViewById(R.id.ll_Home);
    ll_Profile = findViewById(R.id.ll_Profile);
    ll_Setting = findViewById(R.id.ll_Setting);
    ll_Share = findViewById(R.id.ll_Share);
    ll_Logout = findViewById(R.id.ll_Logout);

    iv_Menu.setOnClickListener(this);
    ll_Home.setOnClickListener(this);
    ll_Profile.setOnClickListener(this);
    ll_Setting.setOnClickListener(this);
    ll_Share.setOnClickListener(this);
    ll_Logout.setOnClickListener(this);




@Override
public void onClick(View view) 
    switch (view.getId())
        case R.id.iv_Menu:
            mDrawer.openMenu(true);
            break;

        case R.id.ll_Home:
            replace(new HomeFragment(),"Home");
            mDrawer.closeMenu(true);
            break;

        case R.id.ll_Profile:
            replace(new ProfileFragment(),"Profile");
            mDrawer.closeMenu(true);
            break;

        case R.id.ll_Setting:
            startActivity(new Intent(this, SimplPreach.class));
            mDrawer.closeMenu(true);
            break;

        case R.id.ll_Share:
            Toast.makeText(this, "Share.", Toast.LENGTH_SHORT).show();
            mDrawer.closeMenu(true);
            break;

        case R.id.ll_Logout:
            Toast.makeText(this, "Logout.", Toast.LENGTH_SHORT).show();
            mDrawer.closeMenu(true);
            break;
    


private void replace(Fragment fragment, String s) 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fl_Main,fragment);
    transaction.addToBackStack(s);
    transaction.commit();


private void replace(Fragment fragment) 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fl_Main,fragment);
    transaction.commit();

我一直在搜索几个小时,但没有任何效果, 如何使用 show hide 而不是 replace .. 请帮帮我..

【问题讨论】:

【参考方案1】:

FragmentTransaction 有以下方法可以使用。

show(Fragment fragment)
hide(Fragment fragment)
add(int containerViewId, Fragment fragment, String tag)

而且我认为你不需要打电话给transaction.addToBackStack(s)

【讨论】:

如果你想获取当前的片段,你可以使用这样的东西。公共片段 getCurrentFragment() return getSupportFragmentManager().findFragmentById(fragContainerId()); 您好,感谢您的及时回复!我是菜鸟..对不起,我不明白我应该在我的代码中哪里使用上述方法..你能帮忙吗~谢谢~ 嘿!不知怎的,我想通了~成功了~再次感谢!

以上是关于显示/隐藏片段而不是替换的主要内容,如果未能解决你的问题,请参考以下文章

片段隐藏在Android中不起作用

如何在底部导航中使用设置屏幕外页面限制

JavaFX自定义窗口标题栏

在Android Studio片段之间切换时地图片段不隐藏

仅在一个片段中隐藏状态栏并在其他片段中显示

在android中显示隐藏片段