Android 包含可折叠文本视图的RecyclerView(“显示更多”/“显示更少”)
在我的android应用程序中,我有一个包含文本视图的RecyclerView。如果TextView中的文本超过三行,仅在这种情况下,我想添加一个选项来展开/折叠TextViewAndroid 包含可折叠文本视图的RecyclerView(“显示更多”/“显示更少”),android,android-recyclerview,Android,Android Recyclerview,在我的android应用程序中,我有一个包含文本视图的RecyclerView。如果TextView中的文本超过三行,仅在这种情况下,我想添加一个选项来展开/折叠TextView 我已经讨论了建议的解决方案,包括普通的textview(getViewTreeObserver().addOnGlobalLayoutListener,也包括booleans)和外部库。我试过了,但没有结果。如果有人能分享一个代码示例或给出建议(特别是在“Recyclerview”中实现上述功能),这将非常有帮助。提前
我已经讨论了建议的解决方案,包括普通的textview(getViewTreeObserver().addOnGlobalLayoutListener,也包括booleans)和外部库。我试过了,但没有结果。如果有人能分享一个代码示例或给出建议(特别是在“Recyclerview”中实现上述功能),这将非常有帮助。提前感谢。理论 第一步。使用MVVM体系结构,您可以将两个变量
LiveData
存储在ViewModel
中
completeDataList
=存储完整的数据列表
showndalist
=要在RecyclerView
中显示的数据列表。您将使用此列表(添加或删除)
第二步。在片段
中,获取一个视图模型
,并观察那些显示列表
。每当值更改时,使用RecyclerView.notifyDataSetChanged()
刷新RecyclerView
第三步。使用TextView.onClickListener
从completeDataList
中发出添加/删除内容的命令
示例代码
免责声明:这只是一个示例代码,大致说明了它是如何完成的
MyViewModel.kt
class MyViewModel: ViewModel() {
val completeDataList = MutableLiveData<List<String>>()
val shownDataList = MutableLiveData<List<String>>()
fun initData() {
//fill your completeDataList with all data
//Copy three lines to shownDataList
}
fun showAll() {
//Clear and Fill your shownDataList with all data from completeDataList
}
fun showLess() {
//Put only 3 data in your shownDataList
}
}
类MyViewModel:ViewModel(){
val completeDataList=MutableLiveData()
val showndalist=MutableLiveData()
fun initData(){
//用所有数据填充您的completeDataList
//将三行复制到ShownDalist
}
趣味秀{
//清除并用CompletedAtalList中的所有数据填充ShowData列表
}
无趣{
//在ShownDalist中仅放置3个数据
}
}
MyActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
//After setting the layout,
//And also already initialise the RecyclerView along with it's adapter
myVM = ViewModelProviders.of(this).get(MyViewModel::class.java)
myVM.shownDataList.observe(this, Observer { newList ->
if (newList is List<*>) {
//renewData here is just setting newList
//and call notifyDataSetChanged()
recyclerAdapter.renewData(newList)
}
})
textView.setOnClickListener {
if (allShown) {
myVM.showLess()
allShown = false
} else {
myVM.showAll()
allShown = true
}
}
}
override-fun-onCreate(savedInstanceState:Bundle?){
//在设置布局之后,
//并且已经初始化了RecyclerView及其适配器
myVM=ViewModelProviders.of(this.get)(MyViewModel::class.java)
myVM.showndalist.observe(这个,observator{newList->
if(newList是List){
//这里的更新数据只是设置新列表
//并调用notifyDataSetChanged()
recyclerAdapter.renewData(新列表)
}
})
textView.setOnClickListener{
如果(全部显示){
myVM.showLess()
AllShowed=false
}否则{
myVM.showAll()
AllShowed=true
}
}
}
希望它能起作用!:) 谢谢你的建议。我不熟悉MVVM模式,textview的文本是动态的。文本可以是10行。在应用程序启动时,文本将仅显示3行,并附加“查看更多”字符串。一旦用户单击“查看更多”,整个10行文本将可见,并添加“查看较少”字符串。MVVM模式对于构建反应式android应用程序非常有用。这样,只要数据发生更改,就可以更改UI。我想它会完全满足你的需要。在步骤3中,每当有人单击
文本视图
,只需将所有内容复制到您的showndalist
。这样,您的showndalist
会显示整个10行。当然。让我试试这个解决办法。我也将期待MVVM模式。如果您有以上MVVM的代码示例,请告诉我。