在我的第一个片段中,我有一个带有值的EditText
。问题是当我转到FragmentTwo
并返回到FragmentOne
时,EditText
(在FragmentOne
中)丢失了我先前插入的文本。我试图将其保存在onSaveInstanceState()
中并在onViewStateRestored()
中进行检索,但由于他从未调用过onSaveInstanceState()
并且始终是savedInstanceState
,因此他似乎没有存储信息空。
这是我的片段替换方法
fragmentManager
?.beginTransaction()
?.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_out_right, R.anim.slide_in_right)
?.replace(frame, MyFragment.newInstance(), tag)
?.addToBackStack(tag)
?.commit()
这是我在onSaveInstanceState()
中的FragmentOne
:
override fun onSaveInstanceState(outState: Bundle) {
outState.putDouble(Constants.currentAmount, currentAmount)
super.onSaveInstanceState(outState)
}
这是我的onView,存储在FragmentOne
中:
override fun onViewStateRestored(savedInstanceState: Bundle?) {
super.onViewStateRestored(savedInstanceState)
if(savedInstanceState!= null) {
currentAmountSaved = savedInstanceState.getDouble(Constants.currentAmount)
}
}
这是我在FragmentTwo
中的后按:
fragmentManager?.popBackStack()
所以我的目标是保存EditText
,传递给FragmentTwo
,当我返回FragmentOne
时,与我输入的值相同的EditText
更改Fragments
。
这是我来自FragmentOne
(我要还原的片段)的xml文件
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
<View
android:id="@+id/fManageFundsHeaderLayout"
android:layout_width="match_parent"
android:layout_height="250dp"
android:background="@color/colorBackgroundToolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/addFundsComponent"
layout="@layout/component_manage_funds"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/fManageFundsHeaderLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>
答案 0 :(得分:0)
您可以这样做:
private var contentView: View? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if (contentView == null) {
contentView = inflater.inflate(xxxxx)
}
(contentView?.parent as? ViewGroup)?.removeView(contentView)
return contentView
}
答案 1 :(得分:-1)
我认为您使用了错误的还原状态回调。尝试从片段的onCreate / onCreateView方法中探索Bundle对象