无法在旋转更改中保存编辑文本值



我有包含EditText的布局。当我旋转手机时,EditText中的值消失了。我已尝试使用saveInstanceState,但无法使用。saveInstanceState成功保存了My EditText值,但EditText.setText无法设置为saveInstanceState捆绑包中的值。这是我的代码

碎片

class HelpFragment : Fragment() {
private var _binding: FragmentHelpBinding? = null
private val binding get() = _binding
private var helpMessage: String? = ""
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentHelpBinding.inflate(inflater, container, false)
return binding?.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViewClicked()
helpMessage = savedInstanceState?.getString("helptext")
if (!helpMessage.isNullOrEmpty()) {
activity?.runOnUiThread {
binding?.edtHelpMessages?.setText(helpMessage)
Log.e("HelpFragment", "Help message $helpMessage")
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("helptext", binding?.edtHelpMessages?.text.toString())
Log.e("HelpFragment", "Save Instance Help message ${binding?.edtHelpMessages?.text.toString()}")
}
private fun initViewClicked() {
binding?.layoutHelp?.setOnClickListener { hideKeyboard() }
}
private fun hideKeyboard() {
val view: View? = activity?.currentFocus
if (view != null) {
val imm = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}

XML代码

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.profile.faq.HelpFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_help"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusableInTouchMode="true"
android:focusable="true">
<TextView
android:id="@+id/tv_help"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp"
android:text="Tell us what happened"
android:textSize="14sp"
android:textColor="@android:color/black"
android:fontFamily="@font/pra_medium"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:id="@+id/tv_help_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp"
android:text="We will reply back to you as soon as possible, maximum within 24 hours."
android:textSize="14sp"
android:textColor="@android:color/black"
android:fontFamily="@font/pra_light"
app:layout_constraintTop_toBottomOf="@id/tv_help"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:id="@+id/tv_help_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="Your message"
android:textSize="9sp"
android:textColor="@color/colorGrey"
android:fontFamily="@font/pra_regular"
app:layout_constraintTop_toBottomOf="@id/tv_help_detail"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<EditText
android:id="@+id/edt_help_messages"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:padding="12dp"
android:background="@drawable/border"
android:fontFamily="@font/pra_regular"
android:inputType="textMultiLine"
android:gravity="top|start"
android:textSize="12sp"
android:saveEnabled="true"
app:backgroundTint="#29202020"
app:layout_constraintTop_toBottomOf="@id/tv_help_message"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:text="Submit"
android:textSize="14sp"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:background="@color/colorPrimaryDark"
app:layout_constraintTop_toBottomOf="@id/edt_help_messages"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

您是如何将该片段添加到活动中的?

如果您在xml中使用了<fragment>标记来显示HelpFragment,那么请尝试为fragment标记提供ID属性。。

如果你已经使用了片段管理器,那么在添加/替换片段时尝试给予tag name

最新更新