首页 > 解决方案 > 在 android 4.1.1 中使用 Kotlin 从任何类更新活动视图值的最佳方法

问题描述

我正在尝试从外部类更新 TextView 中的值但不起作用,我正在尝试多种方式和许多帖子,但我不走运...顺便说一句,TextView 像类中的参数一样发送并且可以工作,但我们知道不是如果我有很多意见,这是最好的方法。

所以首先有一个基本的代码:

在主要活动 XML 中:


<TextView
        android:id="@+id/tvHello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

在代码中:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ClaseDePrueba(this@MainActivity)
    }
}

终于带着我最后的证明上课了

class ClaseDePrueba(ctx : Context)
{
    val view = LayoutInflater.from(ctx).inflate(R.layout.activity_main,null,false)
    view.tvHello.text = "New Value"
}

即使我尝试使用像这个网站这样的 Kotlin android 扩展,但对我不起作用

https://antonioleiva.com/kotlin-android-extensions/

import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.view.*

几个小时前,我尝试实现一个接口,但我不知道如何引用 TextView 和机会值,我的代码:

class MainActivity : AppCompatActivity() , ClaseDePrueba.MyInterfaceClass {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ClaseDePrueba(this@MainActivity)

    }

    override fun updateClass() {
        TODO("Not yet implemented")
    }

还有我的课

class ClaseDePrueba(ctx: Context)
{

    interface MyInterfaceClass {
        fun updateClass(
        )
    }

所以问题是......修复并使其正常工作的(最佳)方法是什么?

更新和一种解决方案

好吧,我解决了创建一个对象列表并作为参数传递

我不知道是否是最好的方法,但目前有效,谢谢大家


class MainActivity : AppCompatActivity() , ClaseDePrueba.MyInterfaceClass {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textViews = ArrayList<TextView>()
        textViews.add(tvHello)
        textViews.add(tvHello2)

        ClaseDePrueba(this@MainActivity, textViews)

    }
class ClaseDePrueba(ctx: Context, private val tviews: ArrayList<TextView>? = null)
{
    init {
        if (tviews != null) {
            tviews[0].text = "Init1"
            tviews[1].text = "Init2"
        }
    }

标签: androidandroid-studioclasskotlinandroid-activity

解决方案


您可以创建一个接口并尝试在您的活动中实现它。 interface MyInterface { fun update() } 然后尝试使用类的引用访问该函数。

`Class MainActivity : AppCompatActivity() ,MyInterface{
  override fun update(){
  }
    }'

使用类引用访问此函数并更新值。


推荐阅读