简体   繁体   English

在 Android 中,如何在单独的文件中获取 OnItemSelectedListener 中的 viewmodelprovider?

[英]In Android, how to get viewmodelprovider in OnItemSelectedListener in separate file?

I was trying to keep my code clean, so I wanted to put my OnItemSelectedListener methods in a separate file.我试图保持我的代码干净,所以我想把我的 OnItemSelectedListener 方法放在一个单独的文件中。 This seems to work fine, I just define it like so:这似乎工作正常,我只是这样定义它:

public class spinnerSelected implements AdapterView.OnItemSelectedListener {
      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

Then in my mainActivity I set it like so:然后在我的 mainActivity 我这样设置它:

spinner.setOnItemSelectedListener(new spinnerSelected());

This works fine, but now in this onItemSelectedListener i want to upated my viewModel adapter for MainActivity, but I can't figure out how to get to it.这很好用,但现在在这个 onItemSelectedListener 中,我想为 MainActivity 更新我的 viewModel 适配器,但我不知道如何使用它。 In the mainactivity I can get the model like so:在主要活动中,我可以像这样获得 model:

uiViewModel userModel  = ViewModelProviders.of(this).get(uiViewModel.class);

but in my spinnerSelected class I don't have the "this" and I couldn't find it in any of the passed in objects.但是在我的 spinnerSelected class 中,我没有“this”,并且在任何传入的对象中都找不到它。

So is there a way to do this or am I doomed to just put my onItemSelectedListener in my main activity (which works fine)?那么有没有办法做到这一点,或者我注定只是把我的 onItemSelectedListener 放在我的主要活动中(效果很好)?

Thank you谢谢

You can pass your Activity or any other java object into your own spinnerSelected class.您可以将您的 Activity 或任何其他 java object 传递给您自己的 spinnerSelected class。 You just need to add a constructor.您只需要添加一个构造函数。 It will be called automatically when you create the new instance (which ensures it is never null).创建new实例时会自动调用它(确保它永远不会为空)。 So the code would look something like this:所以代码看起来像这样:

public class SpinnerSelected implements AdapterView.OnItemSelectedListener {
  Activity activity;

  SpinnerSelected (Activity activity){ //same name as class
    this.activity = activity
  }
      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
...

and

spinner.setOnItemSelectedListener(new spinnerSelected(this));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ViewModelProvider.of 和 ViewModelProvider 在 Android Java 中均已弃用 - ViewModelProvider.of and ViewModelProvider both are deprecated in Android Java onItemSelectedListener不会被触发 - onItemSelectedListener doesn't get triggered android理解监听器=(OnItemSelectedListener)活动的新功能 - new to android understanding listener = (OnItemSelectedListener) activity 如何在 Java 中使用 androidx.lifecycle.ViewModelProvider - How to use the androidx.lifecycle.ViewModelProvider in Java 无法转换为android.widget.AdapterView $ OnItemSelectedListener - cannot be cast to android.widget.AdapterView$OnItemSelectedListener 使用Android上的Dagger和Java,ViewModelProvider.Factory在片段上保持为空 - ViewModelProvider.Factory remains null on fragment using Dagger and Java on Android 如何从android中的One Arraylist获取Separate Data Item值 - How to get Separate Data Item value from One Arraylist in android 如何在Android Studio中将函数移至单独的文件? - How can I move functions to a separate file in android studio? Android-单独线程上的HTTP GET - Android - HTTP GET on separate thread 如何从文本文件中获得2个独立的数字平均值? - How to get 2 separate number averages from a text file?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM