小编lin*_*age的帖子

将 LifeCycleOwner 传递到 RecyclerView.Adapter 是否安全

考虑绑定到 viewModel 的布局数据。更具体地说,布局使用一个布局变量来访问这个底层的 viewModel。每当绑定膨胀时,它的 viewModel 和 lifeCycleOwner 都将被设置。(当然 viewModel 包含一些 liveData,直接绑定到一些视图属性)。

RecyclerView(在 Activity 中创建和设置)传递了一个 viewModel 列表。对于每个视图模型,一个 ViewHolder 是通过膨胀布局的新副本及其数据绑定来制作的。

onBindViewHolder策略是

  • 不要触摸视图模型
  • 设置 ViewHolder.dataBinding.setViewModel(viewModels[position])
  1. 但是如何设置 LifeCycleOwner 呢?
  2. 将 LifeCycleOwner 作为参数传递给适配器好吗?毕竟,适配器的生命周期与 RecyclerView 的生命周期一样长,而 RecyclerView 的生命周期则与父 Activity 的生命周期一样长。
  3. 这是在 RecyclerView 上下文中使用 dataBinding 的明智方法吗?

图。1。layout_counter.xml : 添加到 recyclerView 的单个组件的布局。

布局

代码(如果需要)

  • 主视图模型.java
  • 适配器.java
  • 主活动.java
  • layout_counter.xml
  • 布局_main.xml

主视图模型.java

package com.gmail.example.rough;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;

public class MainViewModel extends androidx.lifecycle.ViewModel {

    private MutableLiveData<String> date, …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-recyclerview lifecycleowner

10
推荐指数
1
解决办法
3960
查看次数

Android 中 Kotlin 上的计时器实现:应该使用带延迟的协程还是 CountDownTimer

根据这个答案的评论,使用CountDownTimer

val timer=object:CountDownTimer(Long.MAX_VALUE,10){
            override fun onTick(p0: Long) {
                _mutableLiveData.postValue(newValue)
            }
            override fun onFinish() {
                TODO("Not yet implemented")
            }
        }.also { it.start() }
Run Code Online (Sandbox Code Playgroud)

从 a 内部ViewModel否则会导致内存泄漏。另一方面使用实现定时器viewModelScope.launch

viewModelScope.launch {
            while (true){
                _mutableLiveData.postValue(newValue)
                delay(10)
            }
}
Run Code Online (Sandbox Code Playgroud)

从内部同样ViewModel浪费资源,因为线程在执行其任务后应该退出而不是进入睡眠状态。

我应该使用哪种方式?

我还错过了其他一些惯用的方式吗?

我的问题的上下文是这样的:在 a 中ViewModel,我的计时器实现(当前使用)定期更改a中正在使用的delay私有状态。MutableLiveDataobserveAsState@Composable

android timer kotlin kotlin-coroutines android-jetpack-compose

5
推荐指数
1
解决办法
3926
查看次数

过滤 numpy 数组的 numpy 数组

我有一个 np 数组数组,我想删除与条件匹配的所有元素。我想避免for循环以使其更快。

np 数组的形状为 [N,2]。我想删除第一个元素等于零的所有子数组。

[[1,2],
 [0,5], # <--- Remove
 [5,1],
 [0,3], # <--- Remove
 [1,1],
 [0,0], # <--- Remove
 [5,0],
 .....
 [5,5]] 
Run Code Online (Sandbox Code Playgroud)

我希望有一个只需一行代码的解决方案。我只是无法弄清楚这条线。我希望有人能帮助我。

谢谢。

python arrays numpy mask filter

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

循环中的延迟流无效

程序int通过读取值cin并显示其计数。cin用作while循环测试。

奇怪的是,即使使用非整数输入,循环也会增加计数,即,即使在退出流无效之后,循环也至少执行一次。

换句话说,用于输入

2.53
Run Code Online (Sandbox Code Playgroud)

输出是

1
Run Code Online (Sandbox Code Playgroud)

根据Lippman,Lajoie,Moo的C ++ Primer,5e

当我们使用istream作为条件时,其作用是测试流的状态。如果流有效(即,流没有遇到错误),则测试成功。当我们命中文件结尾或遇到无效输入(例如读取非整数值)时,istream变得无效。处于无效状态的istream将导致条件产生false。

由于尝试读取double时流无效,为什么循环仍然执行循环,然后仅在下一次迭代中退出?

2.53
Run Code Online (Sandbox Code Playgroud)

初学者,因此我们将不胜感激任何帮助。

c++ stream

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