在kotlin/Android Studio中使用延迟数组元素

在kotlin/Android Studio中使用延迟数组元素,android,android-studio,kotlin,Android,Android Studio,Kotlin,我尝试在一个文本视图中传递数组中的每个元素,它们之间有延迟,我尝试使用Runnable&Handler,但它只显示了最后一个元素,我如何以5秒的延迟分别传递每个元素 class MainActivity : AppCompatActivity() { var array = arrayListOf("bizza","Dolma","Burger","Salut","Drinks","Sussie") override fun onCreate(savedInstanceSta

我尝试在一个文本视图中传递数组中的每个元素,它们之间有延迟,我尝试使用Runnable&Handler,但它只显示了最后一个元素,我如何以5秒的延迟分别传递每个元素

class MainActivity : AppCompatActivity() {

    var array = arrayListOf("bizza","Dolma","Burger","Salut","Drinks","Sussie")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
         var ran = Runnable {
            firsttxtview.setText((array[0]).toString())
         }
         var hand = Handler()
         hand.postDelayed(ran, 3000)
}
你可以试试这个

val textViewsArray = arrayListOf(firsttxtview,secondtxtview...)

textViewsArray.forEachIndexed { index, textView->

    Handler().postDelayed({
        activity.runOnUiThread {
           textView.setText((array[index]).toString())
        }
    }, 5000 * index)
}

你可以试着用倒计时。
有关如何使用它的详细信息,请参见。

每个
android.os.Handler
都有自己的关联线程。线程是一种昂贵的资源。在更好的编程技术中,永远不要为非常小的操作创建新线程

Android已经配备了一个永远在UI线程上运行的
Dispatchers.Main
CoroutineDispatcher

您可以使用它直接将协同程序启动到ui线程中:

class MainActivity:AppCompatActivity(){
private var job=job()
private var scope=CoroutineScope(dispatchers.Main+job)
...
重写创建时的乐趣(savedInstanceState:Bundle?){
...
如果(!job.isActive){
job=job()
范围+=作业
}
...
val viewChangeJob=scope.launch{//如果不需要,可以省略创建变量
延迟(3000)
firsttxtview.setText(数组[0])
//或者每3秒更改一次文本,并使用数组中的每个元素
//用于(数组中的项){
//延迟(3000)
//firsttxtview.setText(项目)
// }
}
}
重写onDestroy(){
作业。取消()
}

在这里,您还可以完全控制作业,可以取消作业或暂停作业等。在活动被销毁后,作业也会自动取消!

这就是Kotlin。