Не могу заставить Android работать с сохранением состояния - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время я работаю над небольшим проектом, чтобы попрактиковаться в разработке 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 (), чтобы сохранить мой счетчик с помощью константы, но я не могу заставить его работать должным образом,Я продолжаю просто заканчивать первый элемент моего массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...