有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用共享首选项保存按钮单击状态

我正在使用mvvm、coroutine、kodein和数据绑定处理play store等应用程序的评论部分。在用户按下登录按钮后,我在我的主活动中设置了登录页面。评论活动将变得明显

我在评论活动中设置了recyclerview。在每一个项目结束时,我都会问一个问题,这篇评论是否有用。如果没有,请按“否”,否则请按“是”。我使用共享首选项来保存按钮状态。例如,当我点击yes按钮yesclicked(布尔变量)将保存在sharedpref中。直到这里一切都很好

问题是-->;我保存了该状态,然后在recyclerview类的onBindViewHolder方法中获取了YesButtonState(),我说当活动重新创建时,将yes按钮的背景色更改为#D5FFD7。为此,您之前点击过它

但什么都没发生,也没用

此代码用于共享pref

 val SPP_NAME = "ButtonState"
var buttonLocalState: SharedPreferences = context.getSharedPreferences(SPP_NAME, Context.MODE_PRIVATE)

fun setYesButtonState(isClicked: Boolean) {
    val userLocalDatabaseEditor: SharedPreferences.Editor = buttonLocalState.edit()
    userLocalDatabaseEditor.putBoolean("yesClicked", isClicked)
    userLocalDatabaseEditor.apply()
}

fun setNoButtonState(isClicked: Boolean) {
    val userLocalDatabaseEditor: SharedPreferences.Editor = buttonLocalState.edit()
    userLocalDatabaseEditor.putBoolean("noClicked", isClicked)
    userLocalDatabaseEditor.apply()
}

fun getYesButtonState(): Boolean? {
    if (buttonLocalState.getBoolean("yesClicked", false) == false) {
        return null
    } else {
        return true
    }

}

fun getNoButtonState(): Boolean? {
    if (buttonLocalState.getBoolean("noClicked", false) == false) {
        return null
    } else {
        return true
    }
}

fun clearButtonState() {
    val userLocalDatabaseEditor: SharedPreferences.Editor = buttonLocalState.edit()
    userLocalDatabaseEditor.clear()
    userLocalDatabaseEditor.apply()
}

这是针对recyclerview类的:

        //yes button clicked
        yesbtn.setOnClickListener {
            yesClicked = true
            localStore.clearButtonState()
            localStore.setYesButtonState(yesClicked)
            val Helpful = 1

            if (localStore.getYesButtonState() == true) {
                nobtn.setBackgroundColor(Color.WHITE)
                startColorAnimation(yesbtn)
                activity.handler.postDelayed({
                    yesbtn.setBackgroundColor(Color.parseColor("#D5FFD7"))
                    nobtn.isClickable = true
                }, 892.25.toLong())
            }

            try {
                viewModel.deleteperson(
                    localStore.getUserName().toString(),
                    currentItem.id
                ).observe(mlifecycleOwner, Observer {

                })
            } catch (e: IllegalStateException) {
                e.fillInStackTrace()
            }


            viewModel.feedback(
                currentItem.id,
                localStore.getUserName().toString(),
                currentItem.description,
                Helpful
            ).observe(mlifecycleOwner, Observer {

            })
            Toast.makeText(
                context,
                "thanks for your feedback",
                Toast.LENGTH_SHORT
            ).show()
            yesbtn.isClickable = false

        }


        //no button clicked
        nobtn.setOnClickListener {
            noClicked = true
            localStore.clearButtonState()
            localStore.setNoButtonState(noClicked)
            val Helpful = 0


            if (localStore.getNoButtonState() == true) {
                yesbtn.setBackgroundColor(Color.WHITE)
                startColorAnimation(nobtn)
                activity.handler.postDelayed({
                    nobtn.setBackgroundColor(Color.parseColor("#D5FFD7"))
                    yesbtn.isClickable = true
                }, 892.25.toLong())
            }



            try {
                viewModel.deleteperson(
                    localStore.getUserName().toString(),
                    currentItem.id
                ).observe(mlifecycleOwner, Observer {

                })
            } catch (e: IllegalStateException) {
                e.fillInStackTrace()
            }
            viewModel.feedback(
                currentItem.id,
                localStore.getUserName().toString(),
                currentItem.description,
                Helpful
            ).observe(mlifecycleOwner, Observer {

            })
            Toast.makeText(
                context,
                "please tell us why",
                Toast.LENGTH_SHORT
            ).show()
            it.isClickable = false
        }

我做错了。谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    试试这个 点击按钮后。。调用notifyDataSetChanged();在适配器类中