Многие похожие действия в приложении Android противоречат принципу DRY - PullRequest
2 голосов
/ 28 мая 2020

Я новичок в разработке приложений Android и Kotlin. Итак, теперь у меня есть приложение (написанное с Kotlin) с 20 действиями, одно go за другим: Activity1 -> Activity2 -> ... -> Activity20.

Все они имеют одинаковую структуру XML файлов, которые отличаются только представленным изображением. У них тоже есть похожий код. Поскольку в каждом действии есть 2 кнопки (NEXT и BACK), они различаются только «nextActivity» и «previousActivity» (например, кнопка NEXT для намерений Activity3 Activity4 и кнопка NEXT для намерений Activity5, Activity6 и т. Д.).

В какой-то момент меня это начало беспокоить, поэтому я попытался написать открытый класс:

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()
}
}

Затем я попытался унаследовать эти похожие действия, но я не могу передать Activity в качестве аргумента для класса ( из-за того, что «Классификатор 'Activity2' не имеет объекта-компаньона и так далее»):

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

И в целом такая конструкция выглядит довольно странно. Тогда я подумал, что, возможно, мне вообще не придется этого делать.

Итак, последний вопрос :

Существует принцип DRY, который учитывает большинство программ. Однако я хочу знать: действительно ли удобно иметь похожие коды для действий в Android?

1 Ответ

1 голос
/ 29 мая 2020

Есть несколько способов достичь принципа DRY. Чтобы достичь принципов DRY, вы должны спросить себя, что я нарушаю другое правило Android, такое как Single Activity Architecture, которое является правилом более android специфических c.

Это хорошо, что вы заботитесь о таком принципе, но согласно 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
}

Сообщите мне, если это может вам помочь. Спасибо и удачного кодирования ..!

...