Кнопка Назад приводит к непреднамеренному поведению - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть два занятия. Упражнение A содержит представление элементов карты в виде макулатуры с изображениями в них.При выборе элемента в Задание A .Полная альбомная версия изображения отображается в Упражнение B .

Файл макета для Действие B выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

Кодовая база для действия B выглядит следующим образом:

class PosterViewActivity : AppCompatActivity()
{

    private lateinit var imageView: AppCompatImageView

    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_poster_view)
        init()
    }

    private fun init()
    {
        findViewsByID()
        getBundle()
        toggleHide()
    }  

    private fun getBundle()
    {
        if (intent != null)
        {
            var imageUrl = intent.getStringExtra(ARG_IMAGE_URL)
            if (imageUrl != null)
            {
                Glide.with(this).load(imageUrl).centerInside().into(imageView)
            }
        }
    }

    private fun findViewsByID()
    {
        imageView = findViewById(R.id.imageView)
       }

    override fun onOptionsItemSelected(item: MenuItem): Boolean
    {
        if (item.itemId == android.R.id.home)
        {
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        }
        return super.onOptionsItemSelected(item)
    }

    override fun onBackPressed()
    {
        super.onBackPressed()
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    }

    override fun onWindowFocusChanged(hasFocus: Boolean)
    {
        super.onWindowFocusChanged(hasFocus)

}

    private fun toggleHide()
    {
        val uiOptions = window.decorView.systemUiVisibility
        var newUiOptions = uiOptions
        val isImmersiveModeEnabled = uiOptions or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY == uiOptions
        if (isImmersiveModeEnabled)
        {
            Log.i("PosterViewActivity", "Turning immersive mode mode off. ")
        }
        else
        {
            Log.i("PosterViewActivity", "Turning immersive mode mode on.")
        }

        if (Build.VERSION.SDK_INT >= 14)
        {
            newUiOptions = newUiOptions xor View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        }

        // Status bar hiding: Backwards compatible to Jellybean
        if (Build.VERSION.SDK_INT >= 16)
        {
            newUiOptions = newUiOptions xor View.SYSTEM_UI_FLAG_FULLSCREEN
        }

        if (Build.VERSION.SDK_INT >= 18)
        {
            newUiOptions = newUiOptions xor View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        }

        window.decorView.systemUiVisibility = newUiOptions
    }
}

Однако, когда я нажимаю кнопку «Назад» на устройстве, а не возвращаюсь к Упражнение A .Кнопки состояния и навигации отображаются и скрываются, и для возврата к Упражнение A требуется 4 нажатия кнопки «Назад».Я проверил стек Back и в стеке находятся два действия, а именно A и B

1 Ответ

0 голосов
/ 20 сентября 2019

Вам просто нужно сделать что-то похожее в своей PosterViewActivity:

    //link instance of menu_main
    val mainToolbar = findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbar)
    setSupportActionBar(mainToolbar)

    //Enable Up Button to return you to home page
    val actionBar = supportActionBar
    actionBar?.title = null
    actionBar?.setDisplayHomeAsUpEnabled(true)
...