我有二十个不同的活动具有相同的MaterialTextView(所有活动中的名称相同)
在所有活动中(在 onCreate 事件中),我使用相同的文本初始化文本视图:
textview.text = "Hello"
每个 Activity 都有不同的绑定 XML,如 ActivityOneBinding、ActivityTwoBinding、Activity ThreeBinding 等
我需要通过创建一个acttract类来继承来减少所有活动中的“重复代码”,并在其中设置一次文本
我尝试过继承抽象类的示例,但文本视图的名称无法识别,因为它们是不同的绑定
您可以构造一个抽象基类,指定一种更改文本的方法,以消除具有不同绑定但相同
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
}
}