Android应用程序中有许多类似的活动反对DRY原则



我是 Android App Development 和 Kotlin 的新手。所以,现在我有一个应用程序(用 Kotlin 编写(,一个接一个地包含 20 个活动:活动 1 -> 活动 2 -> ... -> 活动 20。

它们都具有相同的XML文件结构,仅在呈现的图像上有所不同。它们也有类似的代码。由于每个活动中有 2 个按钮(NEXT 和 BACK(,它们仅在"nextActivity"和"previousActivity"方面有所不同(例如,Activity3 意图 Activity4 的 NEXT 按钮和 Activity5 意图 Activity6 的 NEXT 按钮,依此类推(。

在某个时候,它开始让我担心,所以我试图写一个公开课:

open class everyActivity(pic: Int, nextActivity: Activity, prevActivity: Activity): AppCompatActivity() {
val pic = pic
val nextActivity = nextActivity
val prevActivity = prevActivity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(pic)
}
fun nextClick(view: View) {
val nextIntent = Intent(this, nextActivity::class.java)
startActivity(nextIntent)
this.finish()
}
fun backClick(view: View){
val prevIntent = Intent(this, prevActivity::class.java)
startActivity(prevIntent)
this.finish()
}
}

然后我尝试继承这些类似的活动,但我无法将活动作为类的参数传递(由于"分类器'Activity2'没有配套对象等"(:

class Activity2 : everyActivity(R.layout.activity_02, Activity3, Activity1) {}

而且,总的来说,这样的结构看起来很奇怪。那时我想我可能根本不需要这样做。

所以,最后一个问题

考虑到大多数编程,都有 DRY 原则。但是,我想知道:在Android中为活动提供类似的代码真的方便吗?

有多种方法可以实现DRY原则。 要实现DRY原则,您应该问自己,我正在违反另一个Android规则,例如Single Activity Architecture这是更特定于Android的规则。

您正在照顾这样的原则是一件好事,但根据Single Activity Architecture,您必须尝试在 android 应用程序中保持最少的活动。

在这种情况下,您可以创建函数来更改图像,并且可以在nextClick()backClick()中调用该函数。该解决方案将帮助您实现 DRY 原则以及Single Activity Architecture。此外,您将获得更好的用户体验。

因此,您无需创建 10 个活动即可显示 10 张图像,但您可以创建如下函数:

nextClickFunction():
var currentNumber = 1
var iamge = R.drawable.image1
var listOfImages = mutableListOf(
R.drawable.image1,
R.drawable.image2,   
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
R.drawable.image6,
R.drawable.image7,
R.drawable.image8,
R.drawable.image9,
R.drawable.image10,
}
fun nextClick(){
image = listOfImages[currentNumber]
setImageIntoImageView(image)
}
fun backClick(){
image = listOfImages[currentNumber - 1]
setImageIntoImageView(image)
}
fun setImageIntoImageView(int image){
// Set image into ImageView here
}

让我知道它是否可以帮助你。 谢谢和快乐编码..!

最新更新