Android ViewModel的职责是仅持有数据还是持有数据+视图控制器?
创始人
2024-08-19 03:30:15
0

Android ViewModel的职责是仅持有数据,不应该持有视图控制器。ViewModel的目的是将数据保存在配置更改(如屏幕旋转)时保持不变,并且可以供多个Activity或Fragment共享。

以下是一个示例解决方案:

public class MyViewModel extends ViewModel {
    private MutableLiveData data;

    public LiveData getData() {
        if (data == null) {
            data = new MutableLiveData<>();
            loadData();
        }
        return data;
    }

    private void loadData() {
        // 在此处加载数据的逻辑
        // 可以是从数据库、网络或其他来源获取数据的异步操作
        data.setValue("这是一个示例数据");
    }
}

在上面的示例中,ViewModel使用LiveData来保存数据,并且在首次访问时通过loadData()方法加载数据。Activity或Fragment可以通过观察ViewModel的LiveData对象来获取数据并更新UI。

例如,在Activity中使用ViewModel:

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);
        viewModel.getData().observe(this, new Observer() {
            @Override
            public void onChanged(@Nullable String data) {
                // 更新UI的逻辑
                textView.setText(data);
            }
        });
    }
}

上面的示例中,Activity通过ViewModelProviders来获取ViewModel实例,并观察LiveData对象的变化。当数据发生变化时,观察者的onChanged()方法会被调用,从而更新UI。

请注意,ViewModel不应该包含任何与UI相关的逻辑,它仅负责保存和管理数据。视图控制器(如Activity或Fragment)应该负责处理UI的更新和用户交互。

相关内容

热门资讯

轻量版八分钟!wepoke有挂... 轻量版八分钟!wepoke有挂网上德州微扑克辅助(其实真的有挂)-知乎1、用户打开应用后不用登录就可...
挂一分钟!来玩德州app服务器... 挂一分钟!来玩德州app服务器在哪里德州aa辅助(果真真的有挂)-今日头条小薇(透视辅助)致您一封信...
插件1分钟!wpk ai是有w... 插件1分钟!wpk ai是有wopoker德州真的有挂(的确真的有挂)-哔哩哔哩1、完成wopoke...
安卓版本6分钟!轰趴大菠萝十三... 安卓版本6分钟!轰趴大菠萝十三水辅助德州ai智能辅助(果然真的有挂)-知乎1、轰趴大菠萝十三水辅助系...
ai辅助五分钟!微扑克的辅助工... 您好,云扑克是否有外挂这款游戏可以开挂的,确实是有挂的,需要了解加微【487309276】很多玩家在...
新版八分钟!aapoker辅助... 新版八分钟!aapoker辅助工具wpk俱乐部有外挂(好像真的有挂)-小红书1、下载好wpk俱乐部有...
安卓版九分钟!德州之星辅助we... 安卓版九分钟!德州之星辅助wepoke ai辅助(果然真的有挂)-微博客户端;1)德州之星辅助辅助挂...
渠道八分钟!pokernow可... 渠道八分钟!pokernow可以加注德州ai辅助神器(其实真的有挂)-小红书;1、让任何用户在无需p...
最新款7分钟!gg扑克辅助we... 最新款7分钟!gg扑克辅助wepoke模拟器(果然真的有挂)-百度知乎;1、打开软件启动之后找到中间...
安装1分钟!nzt德州辅助软件... 安装1分钟!nzt德州辅助软件微扑克辅助软件(都是真的有挂)-百度知乎;1、点击下载安装,微扑克辅助...