Мое приложение не сохраняет состояние экземпляра (с помощью функции onSaveInstanceState ()) - PullRequest
0 голосов
/ 19 мая 2019

Я работаю над приложением для Android на языке Kotlin, и мне нужно сохранить состояние фрагмента, когда я нажимаю на другую вкладку и затем возвращаюсь на ту же вкладку.

Чтобы убедиться, что он работает должным образом, я вставил счетчик, который подсчитывает при каждом нажатии кнопки, как показано в приведенном ниже коде, но кажется, что в моем коде есть проблема, поскольку он сбрасывается в 0 каждый раз, когда я меняю вкладку (т.е. не сохранение состояния).

Я прошел через много вопросов о стековом потоке и много видео без успеха.

Что-то не так в моем коде ниже?

Благодарим Вас за поддержку и заранее благодарим.

MainActivity.kt

class MainActivity : AppCompatActivity() {

private var containerFrame: FrameLayout? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    containerFrame = findViewById<FrameLayout>(R.id.containerFrame)
    val navigation = findViewById<BottomNavigationView>(R.id.bottomBar)
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectListener)

    val fragment = HomeTabFragment()      //.newInstance()
    addFragment(fragment)
}

private val mOnNavigationItemSelectListener = object : BottomNavigationView.OnNavigationItemSelectedListener {

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.TabHome -> {
                val fragment = HomeTabFragment()      //.newInstance()
                addFragment(fragment)
                return true
            }
            R.id.TabTwo -> {
                val fragment = TabTwoFragment()
                addFragment(fragment)
                return true
            }
            R.id.TabThree -> {
                val fragment = TabThreeFragment()
                addFragment(fragment)
                return true
            }
            R.id.TabFour -> {
                val fragment = TabFourFragment()
                addFragment(fragment)
                return true
            }
        }
        return false
    }
}

private fun addFragment(fragment: Fragment) {
    supportFragmentManager.beginTransaction()
        .setCustomAnimations(R.anim.design_bottom_sheet_slide_in, R.anim.design_bottom_sheet_slide_out)
        .replace(R.id.containerFrame, fragment, fragment.javaClass.simpleName)
        .addToBackStack(fragment.javaClass.simpleName).commit()
}
}

HomeTabFragment.kt

class HomeTabFragment : Fragment() {

var counterOne: Int? = 0

companion object {
    fun newInstance(): HomeTabFragment {
        val homeTabFragment = HomeTabFragment()
        val args = Bundle()
        homeTabFragment.arguments = args
        return homeTabFragment
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    if (savedInstanceState != null) {
        counterOne = savedInstanceState!!.getInt("counter", 0)
    }
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater!!.inflate(R.layout.fragment_tab_home, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    val testButtonOne = view!!.findViewById<Button>(R.id.testButtonOne)
    val resultOne = view!!.findViewById<TextView>(R.id.resultOne)

    resultOne.text = "$counterOne"

    testButtonOne.setOnClickListener {
        counterOne = counterOne!! + 1

        resultOne.text = "$counterOne"
    }
}

override fun onViewStateRestored(savedInstanceState: Bundle?) {
    super.onViewStateRestored(savedInstanceState)
}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)

    outState.putInt("counter", counterOne!!)
}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          tools:context=".MainActivity">

<FrameLayout
        android:id="@+id/containerFrame"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

<android.support.design.widget.BottomNavigationView
        android:id="@+id/bottomBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="?android:attr/windowBackground"
        app:menu="@menu/tabs" />

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