android - 在 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"
}
}
解决方案
您可以创建一个接口并尝试在您的活动中实现它。
interface MyInterface { fun update() }
然后尝试使用类的引用访问该函数。
`Class MainActivity : AppCompatActivity() ,MyInterface{
override fun update(){
}
}'
使用类引用访问此函数并更新值。
推荐阅读
- javascript - Javascript/Jquery 3.3 从非严格到严格和顺序调用的转换函数
- docker - 如何在 docker 容器中运行后台程序
- python - 使用 Python 阅读 PDF 摘要
- html - 在 CSS 元素网格中对齐文本
- mysql - MYSQL:根据多个条件合并具有不同列数且不共享ID的两个表
- kubernetes - 如何安排执行 kubectl 命令的 cronjob?
- android - 下面是我的代码我想通过使用下面的代码将图像 url 发送到服务器而不是完整的图像我在 android studio 中收到服务器 500 错误
- gitlab - 从 gitlab 中删除子组所有者
- python - Python 3 程序返回错误“EOFError: EOF when reading a line”
- android - android构建版本是否需要index.android.bundle?