gpt4 book ai didi

android - 使用底部导航时保存 fragment 状态

转载 作者:行者123 更新时间:2023-11-29 23:28:24 25 4
gpt4 key购买 nike

我正在使用 bottom navigation drawer 在 fragment 之间切换,问题是每次我切换回 fragment 时它都会重新创建。

如何保存 fragment 的状态并在切换回 fragment 时恢复?

        bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener(){
@Override
public void onTabSelected(int position) {
if (position==0){
loadFragment(new Daily());
}
if (position==1){
loadFragment(new Trending());

}
if (position==2){
loadFragment(new Random());
}
}
@Override
public void onTabUnselected(int position) {

}
@Override
public void onTabReselected(int position) {
}
});

private void loadFragment(Fragment fragment) {
// load fragment
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.attach( fragment);
transaction.addToBackStack(null);
transaction.commit();


}

最佳答案

问题是您总是在任何 onTabSelected 上创建新的 Fragment。因此,为了修复它,您需要使用 FragmentManager

可能的解决方案:使用addshow/hide 方法。

示例:

private static final String DAILY_TAG = BuildConfig.APPLICATION_ID + ".DAILY_TAG";
private static final String TRENDING_TAG = BuildConfig.APPLICATION_ID + ".TRENDING_TAG";
private static final String RANDOM_TAG = BuildConfig.APPLICATION_ID + ".RANDOM_TAG";

public void onTabSelected(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();

if (position == 0) {
hideFragment(TRENDING_TAG)
hideFragment(RANDOM_TAG)

Fragment fragment = fragmentManager.findFragmentByTag(DAILY_TAG);
FragmentTransaction transaction = fragmentManager.beginTransaction()

if (fragment != null) {
transaction.show(fragment)
} else {
transaction.add(content.id, new Daily(), DAILY_TAG)
}

transaction.commitNow()

} else if (position == 1) {
hideFragment(DAILY_TAG)
hideFragment(RANDOM_TAG)

Fragment fragment = fragmentManager.findFragmentByTag(TRENDING_TAG);
FragmentTransaction transaction = fragmentManager.beginTransaction()

if (fragment != null) {
transaction.show(fragment)
} else {
transaction.add(content.id, new Trending(), TRENDING_TAG)
}

transaction.commitNow()

} else {
hideFragment(TRENDING_TAG)
hideFragment(DAILY_TAG)

Fragment fragment = fragmentManager.findFragmentByTag(RANDOM_TAG);
FragmentTransaction transaction = fragmentManager.beginTransaction()

if (fragment != null) {
transaction.show(fragment)
} else {
transaction.add(content.id, new Random(), RANDOM_TAG)
}

transaction.commitNow()
}

fragments.put(position, fragment);

loadFragment(fragment);
}

private void hideFragment(String tag) {
FragmentManager fragmentManager = getSupportFragmentManager()
Fragment currentFragment = fragmentManager.findFragmentByTag(tag)

if (currentFragment != null) {
fragmentManager.beginTransaction().hide(currentFragment).commitNow()
}
}

PS - 代码可以优化。

关于android - 使用底部导航时保存 fragment 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53129468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com