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中使用应用程序上下文的情况。

相关内容

热门资讯

黑科技辅助挂(wpk德州)外挂... 黑科技辅助挂(wpk德州)外挂透视辅助器(透视)新2025版(原来存在有挂)1、很好的工具软件,可以...
黑科技肯定!(WPK)透视辅助... 黑科技肯定!(WPK)透视辅助脚本,(WPk)一直是有挂,细节方法(有挂软件);WPk软件透明挂更新...
黑科技智能ai(德州)外挂辅助... 黑科技智能ai(德州)外挂辅助教程(透视)新2025版(果然是真的有挂)1.德州 ai辅助创建新账号...
黑科技存在!(WEPoke)软... 黑科技存在!(WEPoke)软件透明挂,(wepOke)一直是真的有挂,技巧教程(有挂技巧);玩家必...
黑科技好友房(wepoker)... 黑科技好友房(wepoker)黑科技透明挂辅助方法(透视)攻略教程(总是是真的有挂)1、许多玩家不知...
黑科技工具!(AAPOKeR)... 黑科技工具!(AAPOKeR)透明挂辅助神器,(aapoker)好像是真的有挂,科技教程(有挂方法)...
黑科技私人局(WePoKer)... 黑科技私人局(WePoKer)黑科技透明挂辅助器(透视)切实教程(总是真的是有挂)该软件可以轻松地帮...
黑科技透明挂!(fishpok... 1、黑科技透明挂!(fishpoker)外挂辅助app,(轰趴大菠萝十三水)一贯是真的有挂,必赢方法...
黑科技规律(wpK)外挂透视辅... 黑科技规律(wpK)外挂透视辅助技巧(透视)必胜教程(一贯是有挂);在进入wpK辅助挂后,参与本局比...
黑科技玄学!(德州之星)外挂辅... 黑科技玄学!(德州之星)外挂辅助神器,(德州)果然有挂,黑科技教程(有挂透明)这是由厦门游乐互动科技...