gpt4 book ai didi

Android ViewModel 无法在 fragment 更改后继续存在

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:11:02 25 4
gpt4 key购买 nike

我一直在尝试使用 View 模型和实时数据在 fragment 之间共享信息。

但是,当我从第一个 fragment 更改为另一个 fragment 时,我的 View 模型似乎已重新初始化,这让我丢失了之前存储的所有数据。

我在我的 fragment 中以相同的方式两次获得我的 View 模型:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
interventionViewModel = ViewModelProviders.of(this).get(InterventionsViewModel.class);

}

这就是我在我的 Activity 中替换我的 fragment 的方式(我想问题一定来自 fragment 生命周期,但我不知道错误在哪里:/)

public void showFragment(Fragment fragment) {

String TAG = fragment.getClass().getSimpleName();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment, TAG);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}

public void backstackFragment() {
Log.d("Stack count", getSupportFragmentManager().getBackStackEntryCount() + "");
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
finish();
}
getSupportFragmentManager().popBackStack();
removeCurrentFragment();
}

private void removeCurrentFragment() {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment currentFrag = getSupportFragmentManager()
.findFragmentById(R.id.fragment_container);

if (currentFrag != null) {
transaction.remove(currentFrag);
}
transaction.commitAllowingStateLoss();
}

当我需要一个 fragment 时,我调用 backStackFragment() 来删除当前 fragment ,然后我调用 showFragment(MyFragment.newInstance());

fragment 是AndroidStudio生成的 fragment

谢谢你的帮助,

亲切地,马修

最佳答案

尝试绑定(bind)到 Activity 而不是当前 fragment 。

interventionViewModel = ViewModelProviders.of(activity).get(InterventionsViewModel.class);

关于Android ViewModel 无法在 fragment 更改后继续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49402589/

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