如何解决单击按钮继续使用不同的数据更新同一活动
我有一个android应用程序,它向用户询问一些问题,这是一项调查。每个问题都有一个YES
和一个NO
Button
。因此,当用户按下YES
或NO
按钮时,将在Button
和YES
按钮上看到一个新的NO
进入下一个问题。当用户单击下一个问题button
时,它会将问题的textview
更改为下一个问题文本,并且将imageView
更改为该问题。
我正在使用DataBinding
和LiveData
。
我在list
类中为以下问题创建了list
个图像和另一个ViewModel
。
//list of images : Question 4 does not have an image
imgs= listOf(
R.drawable.imgQ1,// 1
R.drawable.imgQ2,// 2
R.drawable.imgQ3)//3
//list of questions
qs= listOf(
"What is .....?",//1
"Who is ....?",//2
"How to .....?",//3
"Why is .....?")//4
我创建了一个ViewState
来处理何时显示哪个按钮和UI:
sealed class MyUIState{
data class UIState(
val policyText: Boolean,// determines if the policy textview should be visible or not
val nextQuestionButton: Boolean,// determines if the next question button should be visible or not
val nextQuestionNewImage: Int = R.drawable.imgQ1,//what image is used for the next question
val nextQuestion: String //what is the next question from the list
) : MyUIState()
}
我还有一个BindingAdapter
类,用于处理可见性以及文本更改和图像更改
(基本上是这样-我通过数据绑定将这些功能添加到了我的布局文件中):
@BindingAdapter("btnNextQ")
fun Button.btnNextQ(myState: MyUIState?){
visibility = if (myState is MyUIState.UIState) {
if (state.nextQuestionButton)
View.VISIBLE
else
View.GONE
} else
visibility
}
@BindingAdapter("newImage")
fun ImageView.newImage(myState: MyUIState?){
if(myStateis MyUIState.UIState){
setImageResource(state.nextQuestionNewImage)
}
}
然后在我的ViewModel
类中,我使用YES
或NO
按钮上的click事件函数,在其中我这样称呼UIState
:>
//I have this declared at the top of my class (global)
private val myViewState = MutableLiveData<MyUIState>()
//this the button click for yes:
fun YesClick(){
myViewState.postValue(MyUIState.UIState(
policyText= true,nextQuestionButton = true,nextQuestion = qs[0])) //still keep the text for question1
}
现在,我希望在用户单击next question
按钮之后更改图像和问题。因此,基本上发生的事情是,在单击下一个问题之后,next question
按钮将变为不可见,而其他组件将保持YES
和NO
按钮以及更新的问题和图像。这是我的下一个问题按钮上的click事件的代码:
fun nextQuestion(){
myViewState .postValue(MyUIState.UIState(
nextQuestionNewImage = imgs[1],nextQuestion = qs[1],nextQuestionButton = false,policyText= false))
}
因此,状态的确会移至下一个问题,而必要的项目是可见的和不可见的,但我正在努力将其移至列表中的下一个问题。我可以从question1
转到question2
,但不确定在问题列表末尾之前如何继续这样做。
所以基本上,我只想继续使用新数据更新同一活动。
任何帮助或建议将不胜感激。
解决方法
不确定我是否理解您的真正问题。也许如果您共享更多代码,我们可以为您提供更好的帮助。
无论如何,我建议您为视图提供两种状态(针对您的情况),问题本身的一种状态包含yes
和no
按钮,问题文本和正确的图像。另一个状态为“移至下一个”问题,其中包含问题文本,按钮以及您想要的任何内容。
然后,您的视图需要处理每个状态。在这种情况下,您需要处理一个状态,同时处理另一种状态,例如显示一个按钮并隐藏不需要的按钮。
因此,每当您单击yes
按钮时,VM都会获取事件,检查所有内容,然后将事件以新状态发送回View,依此类推。
这与您所做的完全相同,但是使用两个状态将帮助您处理每个状态并简化代码
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。