当前位置: 首页 > 知识库问答 >
问题:

智能转换为“整数”是不可能的,因为“mView模型.计数器.值”是一个复杂的表达式

公良飞尘
2023-03-14

主要活动如下:

class MainActivity : AppCompatActivity() {

    private lateinit var mViewModel: MainActivityVm
    private lateinit var mTv: TextView

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(findViewById(R.id.toolbar))

        mTv = findViewById(R.id.tv)

        mViewModel =
            ViewModelProviders.of(this)
                .get(MainActivityVm::class.java)

        mViewModel.counter.observe(this, Observer<Int> { counter ->
            mTv.setText(counter.toString())
        })

        fab.setOnClickListener { view ->
            if(null != mViewModel.counter.value)
            {
                mViewModel.counter.value++
            }
        }
    }

    // ...
}

当单击fab按钮时,我尝试在数据模型中增加计数器

fab.setOnClickListener { view ->
    if(null != mViewModel.counter.value)
    {
        mViewModel.counter.value++
    }
}

但是我在第< code > mview model . counter . value 行得到一个错误

智能转换为“整数”是不可能的,因为“mView模型.计数器.值”是一个复杂的表达式

错误是什么意思?

这里是数据模型

class MainActivityVm : ViewModel() {
    val counter = MutableLiveData<Int>().apply { postValue(0)}
}

编辑

如果我注释掉空检查

fab.setOnClickListener { view ->
    //if(null != mViewModel.counter.value)
    //{
        mViewModel.counter.value++
    //}
}

我收到错误

在Int类型的可空接收器上只允许安全(?)或非空断言(!!)调用?

编辑

使用空检查!!

    fab.setOnClickListener { view ->
        if(null != mViewModel.counter.value)
        {
            mViewModel.counter!!.value++
        }
    }

给出初始错误

智能转换为“整数”是不可能的,因为“mView模型.计数器.值”是一个复杂的表达式

共有1个答案

龚奇逸
2023-03-14

您只需要使用可变的实时数据#postValue() 方法。

此外,最好将功能放在ViewModel中。

在ViewModel中添加一个方法来增加计数器:

class MainActivityViewModel : ViewModel() {
    val counter = MutableLiveData<Int>().apply { postValue(0)}

    public fun incrementCounter() {
        counter.let {
            val currentVal: Int? = it.value
            currentVal?.let { cur ->
                it.postValue(cur + 1)
            }
        }
    }
}

这也可以写成:

public fun incrementCounter() {
    val currentVal: Int? = counter.value
    if (currentVal != null)
        counter.postValue(currentVal + 1)
}

然后,单击FAB时调用该方法:

    fab.setOnClickListener { view ->
        viewModel.incrementCounter()
    }
 类似资料: