gpt4 book ai didi

android - Kotlin :How To Call a View within a Function Using ViewBinding

转载 作者:行者123 更新时间:2023-12-04 02:29:59 24 4
gpt4 key购买 nike

因此,随着新的 Kotlin、Android studio 更新,不可能像常规那样使用各自的 ID 调用 View ,因此无法进行 View 绑定(bind)。但是,我一直在尝试使用绑定(bind)方法在函数内部调用所述 View ,但没有成功,因为它一直返回错误

下面是代码:

class JobActivity : AppCompatActivity() {

private val PROGRESS_MAX = 100
private val PROGRESS_START = 0
private val JOB_TIME = 4000 // ms

private lateinit var job: CompletableJob

private lateinit var binding: ActivityJobBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_job)


binding = ActivityJobBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.jobbutton.setOnClickListener {
if (!::job.isInitialized ){
initjob()
}
}

}


fun initjob(){
binding.jobbutton.setText("StartJob #1")
binding.textView2.setText("")
job= Job()
job.invokeOnCompletion {
it?.message.let {
var msg = it
if (msg.isNullOrBlank()){
msg ="Uknown cancellation Error"
}
println("${job} was cancelled. Reason:$msg")
showtoast(msg)
}
}
binding.progressBar.max= PROGRESS_MAX
binding.progressBar.progress= PROGRESS_START

}
fun showtoast(text:String){
Toast.makeText(this@JobActivity, text,Toast.LENGTH_SHORT).show()
}
}
fun ProgressBar.startJobOrCancel(job: Job) {
if (this.progress > 0) {
Log.d(TAG, "${job} is already active. Cancelling...")
resetjob()
} else {
binding.jobbutton.setText("StartJob #1")
Log.d(TAG, "coroutine ${this} is activated with job ${job}.")

}
}

错误发生在这里:

enter image description here

请提供准确的步骤

最佳答案

@加布里埃尔弗朗西斯

嗯,我认为绑定(bind)对象在扩展函数之外无法识别,您必须将绑定(bind)添加为参数,或者创建一个 lambda 函数,该函数可以在扩展函数执行和结束时调用。

fun ProgressBar.startJobOrCancel(job:Job, jobStarted: () -> Unit ) {
when {
this.progress > 0 -> {
//log
resetJob()
}
else -> {
jobFinished()
}
}
}

并使用 Activity/fragment 中的函数如下:

  private var job = Job()
private var scope = CoroutineScope(Dispatchers.Default+job)
/* inside initJob() ... */
job = scope.launch(){
binding.progress.startJobOrCancel(job) {
binding.jobbutton.setText("StartJob #1")
}
}

更新(2020-11-17):

在 Activity 中的 onCreate 函数中,删除对 setContentView 的重复调用:

  ...
setContentView(R.layout.activity_job) /* remove this if you're using view binding */
binding = ActivityJobBinding.inflate(layoutInflater)
setContentView(binding.root)

关于android - Kotlin :How To Call a View within a Function Using ViewBinding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64862475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com