Android ViewModel - 如何在某些配置更改时强制重新创建
创始人
2024-08-19 03:30:04
0

在Android中,ViewModel是用于存储和管理与UI相关的数据的类。当配置更改(如屏幕旋转)发生时,ViewModel会保持其数据,并将其重新分配给新创建的活动或碎片实例。

然而,有时我们可能需要在某些配置更改时强制重新创建ViewModel,即使数据没有改变。以下是一种解决方法,其中包含代码示例:

  1. 首先,在您的ViewModel类中创建一个标志变量,用于指示是否需要强制重新创建ViewModel。
public class MyViewModel extends ViewModel {
    private boolean forceRefresh = false;

    // getter and setter for forceRefresh variable
    public boolean isForceRefresh() {
        return forceRefresh;
    }

    public void setForceRefresh(boolean forceRefresh) {
        this.forceRefresh = forceRefresh;
    }
    
    // other ViewModel methods and data
    ...
}
  1. 在Activity或Fragment中,获取ViewModel实例并观察forceRefresh变量的变化。
public class MyActivity extends AppCompatActivity {
    private MyViewModel viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        viewModel = ViewModelProviders.of(this).get(MyViewModel.class);

        // Observe the forceRefresh variable
        viewModel.isForceRefresh().observe(this, new Observer() {
            @Override
            public void onChanged(Boolean forceRefresh) {
                if (forceRefresh) {
                    recreate(); // Force recreate the activity
                }
            }
        });

        // Other activity code
        ...
    }

    @Override
    protected void onDestroy() {
        viewModel.setForceRefresh(false); // Reset forceRefresh variable to false
        super.onDestroy();
    }
}
  1. 当需要强制重新创建ViewModel时,设置forceRefresh变量为true。
viewModel.setForceRefresh(true);

当forceRefresh变量的值变为true时,观察者将调用recreate()方法,强制重新创建Activity。在重新创建Activity时,ViewModel将重新创建,即使数据没有改变。

请注意,这种方法仅适用于在Activity或Fragment中强制重新创建ViewModel。如果您想在其他组件(如Service)中重新创建ViewModel,您需要采取其他的方法来实现。

相关内容

热门资讯

透视中牌率!aapoker辅助... 透视中牌率!aapoker辅助软件合法吗(透视)透视脚本下载(一直是真的有挂)1、许多玩家不知道aa...
透视模拟器!德普之星有透视辅助... 透视模拟器!德普之星有透视辅助吗(透视)私人局透视(总是存在有挂)1、很好的工具软件,可以解锁游戏的...
透视了解!aapoker辅助器... 透视了解!aapoker辅助器是真的吗(透视)万能辅助器(好像真的是有挂);1、aapoker辅助器...
透视教学!德普之星透视辅助(透... 透视教学!德普之星透视辅助(透视)辅助软件(确实存在有挂);1、上手简单,内置详细流程视频教学,新手...
透视游戏!aapoker发牌逻... 透视游戏!aapoker发牌逻辑(透视)真的假的(果然真的是有挂)进入游戏-大厅左侧-新手福利-激活...
透视模拟器!德普之星辅助器(透... 透视模拟器!德普之星辅助器(透视)透视辅助(其实有挂)1、德普之星辅助器系统规律教程、德普之星辅助器...
透视透视!aapoker能控制... 透视透视!aapoker能控制牌吗(透视)透视插件(一直真的是有挂)运aapoker能控制牌吗辅助工...
透视辅助!德普之星透视软件免费... 透视辅助!德普之星透视软件免费入口官网(透视)透视免费(竟然存在有挂)该软件可以轻松地帮助玩家将德普...
透视有挂!aapoker如何设... 透视有挂!aapoker如何设置胜率(透视)发牌逻辑(都是真的有挂)1、透视有挂!aapoker如何...
透视辅助!德普之星怎么设置埋牌... 透视辅助!德普之星怎么设置埋牌(透视)透视辅助软件下载(竟然是有挂)1、超多福利:超高返利,海量正版...