Android 包含可折叠文本视图的RecyclerView(“显示更多”/“显示更少”)

Android 包含可折叠文本视图的RecyclerView(“显示更多”/“显示更少”),android,android-recyclerview,Android,Android Recyclerview,在我的android应用程序中,我有一个包含文本视图的RecyclerView。如果TextView中的文本超过三行,仅在这种情况下,我想添加一个选项来展开/折叠TextView 我已经讨论了建议的解决方案,包括普通的textview(getViewTreeObserver().addOnGlobalLayoutListener,也包括booleans)和外部库。我试过了,但没有结果。如果有人能分享一个代码示例或给出建议(特别是在“Recyclerview”中实现上述功能),这将非常有帮助。提前

在我的android应用程序中,我有一个包含文本视图的RecyclerView。如果TextView中的文本超过三行,仅在这种情况下,我想添加一个选项来展开/折叠TextView


我已经讨论了建议的解决方案,包括普通的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的代码示例,请告诉我。