В настоящее время я работаю над небольшим проектом, чтобы попрактиковаться в разработке Android.Сейчас у меня настроено 2 действия: «MainActivity» и «EnlargeImageActivity».
РЕДАКТИРОВАТЬ: я работаю в kotlin
Основная деятельность содержит набор текстовых представлений и изображений для отображения информации о боксере.Все боксеры жестко запрограммированы в массиве, и я получаю их с помощью целого числа, называемого «счетчик».С самого начала счетчик установлен на 0.
private var counter: Int = 0
Вот подвох, для перемещения по списку боксеров я добавил 2 кнопки: кнопку «следующий» и «предыдущий».При нажатии эти кнопки увеличивают / уменьшают счетчик на 1 и обновляют textviews / imageview.
Наконец, при нажатии на изображение я хочу видеть его увеличенным в новом действии.Я сделал эту работу, получив изображение из моего массива боксеров по индексу счетчика.
Проблема возникает, когда я возвращаюсь от своей EnlargedImageActivity к моей MainActivity, MainActivity полностью сбрасывается в counter = 0поэтому первый элемент моего массива отображается вместо элемента, соответствующего только что увеличенному изображению.
Вот код для всего этого: MainActivity:
private lateinit var boxers: Array<Boxer>
private lateinit var imageView: ImageView
private lateinit var nameView: TextView
private lateinit var boxerIdView: TextView
private lateinit var birthDayView: TextView
private lateinit var weightClassView: TextView
private lateinit var winsView: TextView
private lateinit var lossesView: TextView
private lateinit var drawsView: TextView
private var counter: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initialiseViews()
addEventHandlers()
}
private fun initialiseViews() {
imageView = findViewById(R.id.imageView)
nameView = findViewById(R.id.name)
boxerIdView = findViewById(R.id.boxerId)
birthDayView = findViewById(R.id.birthday)
weightClassView = findViewById(R.id.weightClass)
winsView = findViewById(R.id.wins)
lossesView = findViewById(R.id.losses)
drawsView = findViewById(R.id.draws)
boxers = getBoxers()
imageView.setImageDrawable(getDrawable(boxers[counter].image))
val fullName = boxers[counter].first_name + " " + boxers[counter].last_name
nameView.setText(fullName)
boxerIdView.setText(String.format("ID #%04d", boxers[counter].id))
val birthday = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(boxers[counter].birth_day.time)
birthDayView.setText(birthday)
weightClassView.setText(boxers[counter].weightclass)
winsView.setText(boxers[counter].wins.toString())
lossesView.setText(boxers[counter].losses.toString())
drawsView.setText(boxers[counter].draws.toString())
}
private fun addEventHandlers() {
val buttonNext: Button = findViewById(R.id.buttonNext)
buttonNext.setOnClickListener {
if (counter >= 14) {
counter = 0
} else {
counter += 1
}
imageView.setImageDrawable(getDrawable(boxers[counter].image))
val fullName = boxers[counter].first_name + " " + boxers[counter].last_name
nameView.text = fullName
boxerIdView.setText(String.format("ID #%04d", boxers[counter].id))
val birthday = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(boxers[counter].birth_day.time)
birthDayView.setText(birthday)
weightClassView.setText(boxers[counter].weightclass)
winsView.setText(boxers[counter].wins.toString())
lossesView.setText(boxers[counter].losses.toString())
drawsView.setText(boxers[counter].draws.toString())
}
val buttonPrev: Button = findViewById(R.id.buttonPrev)
buttonPrev.setOnClickListener {
if (counter <= 0) {
counter = boxers.lastIndex
} else {
counter -= 1
}
imageView.setImageDrawable(getDrawable(boxers[counter].image))
val fullName = boxers[counter].first_name + " " + boxers[counter].last_name
nameView.text = fullName
boxerIdView.setText(String.format("ID #%04d", boxers[counter].id))
val birthday = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(boxers[counter].birth_day.time)
birthDayView.setText(birthday)
weightClassView.setText(boxers[counter].weightclass)
winsView.setText(boxers[counter].wins.toString())
lossesView.setText(boxers[counter].losses.toString())
drawsView.setText(boxers[counter].draws.toString())
}
}
fun enlargeImage(view: View) {
val imageToEnlarge = boxers[counter].image
val intent = Intent(this, EnlargeImageActivity::class.java).apply {
putExtra(EXTRA_ENLIMAGE, imageToEnlarge)
}
startActivity(intent)
}
EnlargedImageActivity:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_enlarge_image)
val image = intent.getIntExtra(EXTRA_ENLIMAGE, 0)
val imageView = findViewById<ImageView>(R.id.enlargedImage).apply {
setImageDrawable(getDrawable(image))
}
}
Я попытался заставить его работать, переопределив функции onStop (), onSaveInstance и onRestoreInstance (), чтобы сохранить мой счетчик с помощью константы, но я не могу заставить его работать должным образом,Я продолжаю просто заканчивать первый элемент моего массива.