标签: mutablelivedata

android:mutablelivedata更改不更新UI

我正在使用MutableLiveData来存储用户所做的选择.该值是从另一个活动设置的.SO onResume我正在打电话

 myMutableLivedata.value = newvale
Run Code Online (Sandbox Code Playgroud)

但是除非我调用invalidateall(),否则这不会更新UI.

这是MutableLiveData的预期行为

android kotlin mutablelivedata

3
推荐指数
1
解决办法
1017
查看次数

删除 + 添加后片段未收到 LiveData 更新

我目前正在玩弄fragmentViewModel和相关的生命周期的窍门LiveData

我有 2 fragments,fragmentAfragmentB. 我ObserveronCreate每个fragment.

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sharedViewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
    sharedViewModel.getText().observe(this, new Observer<CharSequence>() {
        @Override
        public void onChanged(CharSequence charSequence) {
            editText.setText(charSequence);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

每个fragment都有一个按钮,可以LiveData在共享中更改ViewModel

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    [...]

    buttonOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sharedViewModel.setText(editText.getText());
        }
    });

    [...]
}
Run Code Online (Sandbox Code Playgroud)

SharedViewModel …

android-fragments android-livedata android-viewmodel mutablelivedata

3
推荐指数
1
解决办法
1414
查看次数

为什么 LiveData 比 MutableLiveData 好?

在许多样本中,我看到:

 class DataViewModel{
         val data:LivaData<Int>
             get() = _data 

         private val _data = MutableLiveData<Int>()

    }
Run Code Online (Sandbox Code Playgroud)

但更简单的看起来像这样:

 class DataViewModel{
         val data = MutableLiveData<Int>()

    }
Run Code Online (Sandbox Code Playgroud)

那么,为什么需要这个更复杂的 2 个字段的代码构造呢?

android kotlin android-livedata mutablelivedata

3
推荐指数
2
解决办法
1044
查看次数

当从未直接更新时,具有可变实时数据支持属性的观察到的实时数据如何知道触发观察者?

我正在通过 udacity 关注 google android 项目“猜猜它”,他们介绍了 livedata 和 mutablelivedata。我们已经创建了一个与可变实时数据对象等效的实时数据,并为可变实时数据实例的实时数据创建了 get() 支持属性。我们使用 mutablelivedata 实例对 viewModel 中的数据进行所有更改。我们的 UI 片段在 viewModel 的 livedata 对象上设置观察者,而不是可变的 livedata 对象。

尽管观察者位于 livedata 实例而不是 mutablelivedata 实例上,但当更新 mutablelivedata 对象时,会触发 livedata 观察者代码。我喜欢它的工作原理,但我不太明白它是如何工作的。谁能向我解释一下吗?

在视图模型中

val _word = MutableLiveData<String>()
val word : LiveData<String>
        get() = _word
Run Code Online (Sandbox Code Playgroud)

在 ViewModel 中编辑

private fun nextWord() {
    //Select and remove a word from the list
    if (wordList.isEmpty()) {
        //gameFinished()
    } else {
        _word.value = wordList.removeAt(0)
    }
}
Run Code Online (Sandbox Code Playgroud)

在 UI 片段中

viewModel.word.observe(this, Observer{newWord ->
            binding.wordText.text = newWord …
Run Code Online (Sandbox Code Playgroud)

android android-livedata mutablelivedata

3
推荐指数
1
解决办法
2415
查看次数

如何在 Android 中通过 ViewModel 类在 Activity 和 Fragment 之间共享数据?

我想知道是否可以传递在 Activity 类中声明的 String 数据并将 String 数据传递给 ViewModel 类,然后将数据传递给 Fragment 类。

视图模型类

class TimeTableViewModel extends ViewModel {

private MutableLiveData<String> start_time_str = new MutableLiveData<>();

void send_StartTime(String start_Time){
    start_time_str.setValue(start_Time);
}

LiveData<String> get_StartTime(){
    return start_time_str;
}}
Run Code Online (Sandbox Code Playgroud)

在 ViewModel 类中,我MutableLiveData<String> start_time_str已经初始化为new MutableLiveData<>();

我想void send_StartTime(String start_Time)在 Activity 类中使用函数来设置参数的值String start_Time并调用start_time_strFragment 类。

活动课

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()){
        case android.R.id.home:
            finish();
            break;
        case R.id.add_schedule_save:
            String start_time_str = startTime.getText().toString();
            Intent intent_restart0 = new Intent(TimeTable_Add_New_Schedule.this, MainActivity.class);
            startActivity(intent_restart0);
            TimeTableViewModel …
Run Code Online (Sandbox Code Playgroud)

android mvvm viewmodel android-livedata mutablelivedata

3
推荐指数
2
解决办法
5544
查看次数

无法从我的片段中的 ViewModel 观察 LiveData&lt;MutableList&lt;T&gt;&gt;

我的片段.kt:

viewModel.studentsTemp.observe(this, Observer {
    adapter.submitList(it)
})
Run Code Online (Sandbox Code Playgroud)

MyViewModel.kt

private var _studentsTemp = MutableLiveData<MutableList<Student>>()
val studentsTemp: LiveData<MutableList<Student>> get() = _studentsTemp
init {
        _studentsTemp.value = mutableListOf<Student>()
}
Run Code Online (Sandbox Code Playgroud)

仅当应用程序启动时(即创建 ViewModel 时,即当 init 块在 View Model 中运行时)才会调用 Observer。

android mvvm kotlin android-livedata mutablelivedata

3
推荐指数
1
解决办法
1178
查看次数

Android ViewModel 观察 Mu​​tableLiveData&lt;ArrayList&lt;String&gt;&gt;

我在片段中有一个 tablayout。选项卡布局有 3 个选项卡。哪个选项卡有一个片段。并且,在第一个片段中,我插入一个字符串并将其添加到 viewModel MutableLiveData<ArrayList>>变量中。然后,我想在第三个片段中观察。我的主要视图模型:

class MainViewModel : ViewModel() {
val message = MutableLiveData<ArrayList<String>>(arrayListOf())

fun myMessage(msg: String) {
    message.value?.add(msg)
}
}
Run Code Online (Sandbox Code Playgroud)

第三片段:

class Fragment3 : Fragment() {

lateinit var model: MainViewModel

private lateinit var viewModel: MainViewModel

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view= inflater.inflate(R.layout.fragment3_fragment, container, false)

    model = activity?.let { ViewModelProvider(it).get(MainViewModel::class.java) }!!

    model.message.observe(viewLifecycleOwner, Observer {
        Log.e("aqui", "aqui$it")
    })
    return view
}
}
Run Code Online (Sandbox Code Playgroud)

我的第一个片段:

class Fragment1 : Fragment() {

lateinit var model: …
Run Code Online (Sandbox Code Playgroud)

android viewmodel observable android-livedata mutablelivedata

3
推荐指数
1
解决办法
3112
查看次数

将 MutableList 包装在 LiveData 或 MutableLiveData 中

MutableList将 a 包装在LiveDataor中的建议方法是什么MutableLiveData,以便可以修改列表并观察它所发生的变化?

我在 Room 中有一些相当短的表(<20 个项目)(它缓存从服务器检索的值)。我想保留这些项目的可变子集;用作其他更大表的查询中的过滤器。我的想法是将 a 分配给我的应用程序中的模型类,并通过将此类包装在或 中MutableList来使其可观察。然后,通过更新这些选择中的项目,我可以触发大型表上的必要查询。MutableLiveDataLiveData

目前我的代码具有以下结构,我已在问题中将其精简为我认为相关的内容。最终我想keyset在更复杂的查询中使用多个。我的简化模型文件如下,

class Model(application : Application) : AndroidViewModel(application)
{
  val keys    : LiveData<List<Key>>
  val keyset  : LiveData<MutableList<Key>>
  val values  : LiveData<List<Value>>
  init {
    keys   = repository.keys
    values = repository.values
    keyset = mutableListOf<Key>() // I'm not entirely sure how to instantiate LiveData<MutableList<Key>>
  }
}
Run Code Online (Sandbox Code Playgroud)

它依赖于存储库,

class Repository(private val queryset : QuerySet)
{
   val keys   : LiveData<List<Key>>   = queryset.getKeys()
   val values : …
Run Code Online (Sandbox Code Playgroud)

kotlin android-livedata mutablelivedata mutablelist

2
推荐指数
1
解决办法
1万
查看次数

无法从 Fragment 中的 ViewModel 观察 LiveData

RecyclerView我的里面有ViewPager一个Fragment。此RecyclerView显示从服务器获取的数据。它通常可以工作,但我无法使用ViewModel和实现相同的功能LiveData,因为当从 更改时,该livedata.observe方法不会被调用。livedataViewModel

这是我的MonthlyOrderViewModel.java类的源代码

public class MonthlyOrderViewModel extends AndroidViewModel {

private Retrofit retrofit;
private RetrofitServices retrofitServices;
private MutableLiveData<MonthlyOrderHistory> monthlyOrderHistoryMutableLiveData = new MutableLiveData<>();

public MonthlyOrderViewModel(@NonNull Application application) {
    super(application);
    retrofit = RetrofitFactory.getRetrofit();
    retrofitServices = retrofit.create(RetrofitServices.class);
}

public MutableLiveData<MonthlyOrderHistory> getMonthlyOrderHistoryMutableLiveData() {
    return monthlyOrderHistoryMutableLiveData;
}
public void fetchMonthlyOrders() {
    Call<MonthlyOrderHistory> call = retrofitServices.getAllMonthlyOrderHistory(IpharmaApplication.getInstance().getLoggedInUser().getId());
    call.enqueue(new Callback<MonthlyOrderHistory>() {
        @Override
        public void onResponse(Call<MonthlyOrderHistory> call, Response<MonthlyOrderHistory> response) {

            MonthlyOrderHistory monthlyOrderHistory = response.body(); …
Run Code Online (Sandbox Code Playgroud)

android android-livedata android-viewmodel mutablelivedata

2
推荐指数
1
解决办法
4818
查看次数

将 MutableLiveData 转换为 MutableState

我是jetpack compose的新手。我有这个值,它是一个 MutableLiveData。我希望 ofc 观察对象并获取值。我想知道是否可以以简单的方式将 MutableLiveData 转换为 MutableState ?为了使其更简单,还是最好将其保留为 MutableLiveData?

android mutablelivedata android-jetpack-compose

2
推荐指数
1
解决办法
2983
查看次数