首页 > 解决方案 > 如何在 android studio 中的片段上使用 beginTransaction.hide().show() 而不是 beginTransaction().replace()?

问题描述


从我开始学习 android studio 到现在才几天,今天是我偶然发现碎片的一天。我正在使用 beginTransaction.replace() 方法来替换片段,但这只是每次都创建一个新片段。我已经实现了一个底部导航视图,其中包含菜单中每个相应项目的片段。这是我的代码:
package com.example.application;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import com.google.android.material.bottomnavigation.BottomNavigationView;

public class Application extends AppCompatActivity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_application);
        BottomNavigationView bottomNav = findViewById(R.id.bottomNavigationView);
        bottomNav.setOnNavigationItemSelectedListener(navListener);
}

private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment selectedFragment = null;

            switch (item.getItemId()) {
                case R.id.firstPage:
                    selectedFragment = new firstFragment();
                    break;
                case R.id.secondPage:
                    selectedFragment = new secondFragment();
                    break;
                case R.id.thirdPage:
                    selectedFragment = new thirdFragment();
                    break;
                case R.id.fourthPage:
                    selectedFragment = new fourthFragment();
                    break;
                case R.id.fifthPage:
                    selectedFragment = new fifthFragment();
                    break;
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment, selectedFragment).commit();

            return true;
        }
    };
}

replace() 方法不好,因为我需要为每个片段保存状态。我不想使用 onSaveInstanceState 方法来保存状态,因为它们只是令人沮丧。我需要的是替换代码:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment, selectedFragment).commit();

用隐藏和显示替换替换方法。我需要隐藏最后选择的片段并显示当前选择的片段。如何做到这一点?
而且我还想知道 Facebook、Instagram 等大型应用程序如何保持它们的状态,即使用户向下滚动数千个帖子。希望你能回答。问候。

标签: javaandroid-studioandroid-fragmentsfragmentmanagerandroid-bottomnavigationview

解决方案


推荐阅读