使用 ViewBinding 创建具有相同视图的多个活动的基本活动

问题描述 投票:0回答:1

我有二十个不同的活动具有相同的MaterialTextView(所有活动中的名称相同)

在所有活动中(在 onCreate 事件中),我使用相同的文本初始化文本视图:

textview.text = "Hello"

每个 Activity 都有不同的绑定 XML,如 ActivityOneBinding、ActivityTwoBinding、Activity ThreeBinding 等

我需要通过创建一个acttract类来继承来减少所有活动中的“重复代码”,并在其中设置一次文本

我尝试过继承抽象类的示例,但文本视图的名称无法识别,因为它们是不同的绑定

android kotlin class abstract-class android-viewbinding
1个回答
0
投票

您可以构造一个抽象基类,指定一种更改文本的方法,以消除具有不同绑定但相同

MaterialTextView
的各种活动中的重复代码。使用设置文本的方法创建一个抽象基类(让我们将其命名为
BaseActivity
)。

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.textview.MaterialTextView

abstract class BaseActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(getLayoutId())

        // Find and initialize the MaterialTextView
        val textView = findViewById<MaterialTextView>(getTextViewId())
        
        // Set the common text
        textView.text = "Hello"
        
        // Call the abstract method for additional setup
        setupTextView(textView)
    }

    // Abstract methods to be implemented by child activities
    abstract fun getLayoutId(): Int
    abstract fun getTextViewId(): Int
    abstract fun setupTextView(textView: MaterialTextView)
}

我们在前面的类中定义了抽象方法,用于获取布局资源ID和文本视图资源ID。我们还包含一个钩子 (

setupTextView
),用于每个活动可能需要的任何进一步设置。继承
BaseActivity
并在你的每个活动中实现相关方法。

class MyActivity : BaseActivity() {

    override fun getLayoutId(): Int {
        return R.layout.activity_my
    }

    override fun getTextViewId(): Int {
        return R.id.myTextView
    }

    override fun setupTextView(textView: MaterialTextView) {
        // Additional setup for this specific activity's text view
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.