在我的Android应用程序中,我有一个包含TextViews的RecyclerView。如果TextView中的文本超过三行,只有在这种情况下,我想添加一个选项来展开/折叠TextView。
我已经完成了建议的解决方案,普通的textview(getViewTreeObserver()。addOnGlobalLayoutListener,也是布尔值)也与外部库一起使用。我试过了,但最终没有结果。如果有人可以共享代码示例或为其提供建议(特别是在“Recyclerview'”中实现上述内容)将非常有用。提前谢谢。
答案 0 :(得分:-1)
<强>理论强>
步骤1.使用MVVM架构,您可以在LiveData<List<*>>
中存储2个变量ViewModel
。
completeDataList
=存储完整的数据列表。
shownDataList
=您要在RecyclerView
中显示的数据列表。您将使用此列表(添加或删除)。
第2步。在Fragment
中,获取ViewModel
并观察shownDataList
。每当值发生变化时,请使用RecyclerView.notifyDataSetChanged()
刷新RecyclerView
。
步骤3.使用TextView.onClickListener
命令添加/删除shownDataList
内容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
}
}
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
}
}
}
希望它有效! :)