在对话框中无法设置编辑文本



我有一个方法showDownloadDialog()onOptionsItemSelected中调用,它与EditText呈现一个对话框。我希望从SharePreferences设置这个值。但是.setText()不显示SharePreferences的字符串值。toast显示正确的字符串值。感谢任何遇到这个问题的人能给我指明正确的道路。多谢

private fun showDownloadDialog() {
val sharePreferences: SharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
val savedString : String? = sharePreferences.getString("STRING_KEY", null)
var gameToDownload: String
Toast.makeText(this, "Prefer string v3 = $savedString, length ${savedString!!.length}", Toast.LENGTH_LONG).show()
val boardDownloadView = LayoutInflater.from( this).inflate(R.layout.dialog_download_board, null)
showAlertDialog(getString(R.string.fetchMemoryGame), boardDownloadView, View.OnClickListener {
// Grab the text of the game name that the user wants to download
val etDownGame = boardDownloadView.findViewById<EditText>(R.id.etDownloadGame)

etDownGame.setText(savedString)

xml如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<EditText
android:id="@+id/etDownloadGame"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-"
android:ems="10"
android:hint="@string/enterGameName"
android:text=""
android:imeOptions="actionDone"
android:importantForAutofill="no"
android:maxLines="1"
android:inputType="text"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

不能直接从String转换为Editable,请使用

private fun String.toEditable(): Editable =  
Editable.Factory.getInstance().newEditable(this)

在您的活动中作为效用函数并应用为

etDownGame.setText(savedString.toEditable())

再次感谢Anshul。它在将etDownGame移出showAlertDialog后工作。虽然我仍然不确定为什么setText()不工作在showAlertDialog。

private fun showDownloadDialog() {
val sharePreferences: SharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
val savedString : String? = sharePreferences.getString("STRING_KEY", null)
var gameToDownload: String
Toast.makeText(this, "v8 savedString = $savedString, length ${savedString!!.length}", Toast.LENGTH_LONG).show()
val boardDownloadView = LayoutInflater.from( this).inflate(R.layout.dialog_download_board, null)
val etDownGame = boardDownloadView.findViewById<EditText>(R.id.etDownloadGame)
if (savedString!!.isNotEmpty()) {
etDownGame.setText(savedString)
}
showAlertDialog(getString(R.string.fetchMemoryGame), boardDownloadView, View.OnClickListener {
// Grab the text of the game name that the user wants to download
//val etDownGame = boardDownloadView.findViewById<EditText>(R.id.etDownloadGame)

gameToDownload = etDownGame.text.toString().trim()
downloadGame(gameToDownload)
})
}

最新更新