使用替换时如何保存片段状态?

时间:2020-06-05 10:23:07

标签: android android-fragments kotlin fragment

我有一个活动,上面有一个用于存放碎片的容器,还有几个用于在它们之间切换的按钮。在第二个片段中,有文本,图片和按钮,通过单击按钮可以更改文本和图片。如果我切换回fragment_1,然后再切换回fragment_2,则图片和文本仍然很旧。这是我的代码:

class MainActivity : AppCompatActivity() {

    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.d("LogFr", "Start App")

        val fragmentManger = supportFragmentManager
        val transaction = fragmentManger.beginTransaction()
        transaction.add(R.id.frgmCont, Fragment1(), "frag1")
        transaction.commit()
    }

    fun onClick(v: View) {
        val transaction = supportFragmentManager.beginTransaction()
        when (v.id) {
            R.id.btnFr1 -> {
                transaction.replace(R.id.frgmCont, Fragment1(), "frag1").addToBackStack(null)
                Log.i("LogFr", "First Fr")
            }
            R.id.btnFr2 ->  {
                transaction.replace(R.id.frgmCont, Fragment2(), "frag2").addToBackStack(null)
                Log.i("LogFr", "Second Fr")
            }
        }
        transaction.commit()
    }
}

   class Fragment1 : Fragment() {
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.fragment1, null)
        }
    }

class Fragment2 : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            val view = inflater.inflate(R.layout.fragment2, container, false)

            val fr2_txt: TextView = view.findViewById(R.id.fr2_txt) as TextView
            val doSome: Button = view.findViewById(R.id.doSome) as Button
            fr2_txt.text = (2 + 2).toString()

            doSome.setOnClickListener {
                fr2_txt.text = (2 + 5 + 7).toString()
                fr2_img.setImageResource(R.drawable.cat_2)
            }

        return view
    }
}

如何确保新数据保存在片段中?

0 个答案:

没有答案
相关问题