AndroidViewModel vs passing Application context to ViewModel AndroidViewModel与传递应用程序上下文给ViewModel
创始人
2024-08-22 01:00:05
0

AndroidViewModel是继承自ViewModel的一个子类,它专门用于在ViewModel中持有应用程序的上下文。相比之下,传递应用程序上下文给ViewModel需要手动将上下文作为参数传递给ViewModel的构造函数。

这里给出使用AndroidViewModel的解决方案的代码示例:

  1. 创建一个继承自AndroidViewModel的自定义ViewModel类:
public class MyViewModel extends AndroidViewModel {
    private Context mContext;

    public MyViewModel(Application application) {
        super(application);
        mContext = application;
    }

    // 在ViewModel中使用上下文
    public void doSomething() {
        Toast.makeText(mContext, "Hello World", Toast.LENGTH_SHORT).show();
    }
}
  1. 在Activity或Fragment中使用ViewModelProvider获取ViewModel实例:
public class MyActivity extends AppCompatActivity {
    private MyViewModel mViewModel;

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

        // 获取ViewModel实例
        mViewModel = new ViewModelProvider(this).get(MyViewModel.class);

        // 使用ViewModel中的上下文
        mViewModel.doSomething();
    }
}

这样,通过AndroidViewModel,您可以在ViewModel中直接使用应用程序的上下文,而无需手动传递它。

相比之下,如果您选择传递应用程序上下文给ViewModel,您需要手动将上下文作为参数传递给ViewModel的构造函数。这种方法的代码示例如下:

  1. 创建一个自定义ViewModel类:
public class MyViewModel extends ViewModel {
    private Context mContext;

    public MyViewModel(Context context) {
        mContext = context;
    }

    // 在ViewModel中使用上下文
    public void doSomething() {
        Toast.makeText(mContext, "Hello World", Toast.LENGTH_SHORT).show();
    }
}
  1. 在Activity或Fragment中创建ViewModel实例,并将应用程序上下文传递给ViewModel的构造函数:
public class MyActivity extends AppCompatActivity {
    private MyViewModel mViewModel;

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

        // 创建ViewModel实例,并传递应用程序上下文
        mViewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class);

        // 使用ViewModel中的上下文
        mViewModel.doSomething();
    }
}

通过传递应用程序上下文给ViewModel,您可以在ViewModel中使用应用程序的上下文。但是,需要注意的是,当配置更改(如屏幕旋转)时,ViewModel可能会被重新创建,需要确保传递给ViewModel的上下文是最新的。此外,由于需要手动传递上下文,这可能会导致代码冗余和错误。因此,推荐使用AndroidViewModel来处理在ViewModel中使用应用程序上下文的情况。

相关内容

热门资讯

一分钟了解!微信新海贝之城辅助... 一分钟了解!微信新海贝之城辅助,友友联盟辅助免费下载,了解开挂辅助教程(有挂存在);无需打开直接搜索...
研究成果!微信边锋干橙眼辅助,... 研究成果!微信边锋干橙眼辅助,浙江宝宝游戏辅助,必看开挂辅助教程(发现有挂);无需打开直接搜索薇:1...
分享实测!榆林打锅子辅助器,微... 分享实测!榆林打锅子辅助器,微信微乐游戏辅助脚本,传授开挂辅助教程(真的有挂);无需打开直接搜索打开...
一分钟了解!闲来辅助神器怎么下... 一分钟了解!闲来辅助神器怎么下载,赣牌圈破解器,分享开挂辅助教程(有挂讲解);无需打开直接搜索打开薇...
玩家实测!微乐自建房脚本免费下... 玩家实测!微乐自建房脚本免费下载,三江互娱辅助,教会开挂辅助教程(有挂工具);无需打开直接搜索加(薇...
分享一款!广东潮汕雀友会插件,... 分享一款!广东潮汕雀友会插件,金杯竞技辅助,教会开挂辅助教程(有挂技巧);无需打开直接搜索加薇136...
每日必看!奇迹陕西游戏辅助,小... 每日必看!奇迹陕西游戏辅助,小闲川南手游辅助器,发现开挂辅助教程(有挂技术);无需打开直接搜索薇:1...
必备辅助推荐!朋友局辅助器,对... 必备辅助推荐!朋友局辅助器,对战互娱辅助,分析开挂辅助教程(有挂攻略);无需打开直接搜索打开薇:13...
今日科普!逍遥孝感卡五星辅助,... 今日科普!逍遥孝感卡五星辅助,微信小程序财神十三脚本,细节开挂辅助教程(有挂功能);无需打开直接搜索...
必知教程!赣湘互娱透视挂,情怀... 必知教程!赣湘互娱透视挂,情怀宜春辅助,教会开挂辅助教程(有挂技巧)1、下载安装好赣湘互娱透视挂,进...