创新实训博客(17)——Android开发中ListView高度自适应以及组件进阶使用
2020-07-14 06:21
871 查看
高度自适应
ListView是Android开发中非常常用的部分,在各种各样的APP中都有使用,不管是QQ的聊天列表,还是微信的公众号新闻列表。
在实际使用中,遇到了这样一个问题:
可能我希望ListView嵌套在ScrollView里面,而ScrollView中本身有很多其他的组件,这样形成一个整体。
但是实际使用时发现,只要把ListView放置在ScrollView中,高度就会变成只有一行,十分影响体验。
因此,决定自己手动写一个高度自适应的功能。
获取列表对象
[code]val listAdapter = recentView.adapter
遍历元素,添加高度
[code]for (i in 0 until listAdapter.count) { val listItem = listAdapter.getView(i, null, recentView) listItem.measure(0, 0) totalHeight += listItem.measuredHeight }
LayoutParams设置
[code]val params = recentView.layoutParams params.height = totalHeight + (recentView.dividerHeight * (listAdapter.count - 1)) recentView.layoutParams = params
自动测量的效果
不同列表共用ListView
以首页界面为例子:
其实并不需要为每个标签分配一个Fragment,当需要点到某一个的时候,再进行处理。
但是有这样的一个问题,不能够直接设置List。
一方面是因为每个List的里面的元素类型不同,再一方面即使是类型相同的元素,他们的点击跳转也有可能不相同。
所以,我经过摸索,得出了一个比较不错的处理方案。
为每个列表分配List
[code] var globalList = LinkedList<ArticleItem>() var globalList_2 = LinkedList<ArticleItem>() var globalList_3 = LinkedList<TopItem>() var globalList_4 = LinkedList<TopItem>()
设置Adapter和List元素
[code]// 配置list fun setLikestList(list: LinkedList<TopItem>) { val mAdapter = TopItemAdapter(list, activity) // 监听器 val onClickListener = object : AdapterView.OnItemClickListener{ override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { val bundle = arguments val token = bundle!!.getString("token").toString() val blogIntent = Intent(activity, BlogActivity::class.java) blogIntent.putExtra("id", list.get(position).id) blogIntent.putExtra("token", token) startActivity(blogIntent) } } val listView = activity!!.findViewById<ListView>(R.id.index_blog_list) listView.adapter = mAdapter listView.setOnItemClickListener(onClickListener) }
记录当前页面的位置
[code] var currentPage = 1 var listPage = 1 var lastItem = 0
页面切换时首先判断列表,下拉时才进行刷新
[code]val listener_1 = object : View.OnClickListener { override fun onClick(v: View?) { refreshTabs() tab_1.setTextColor(activity!!.getColor(R.color.bBlue)) currentPage = 1 val swipeView:SwipeRefreshLayout = activity!!.findViewById(R.id.index_swipe_layout) swipeView.isRefreshing = true if (!globalList.isEmpty()) { setSubList(globalList) swipeView.isRefreshing = false } else { fetchSubData() } } }
下拉刷新的时候,判断当前页面
[code]val onRefreshListener = SwipeRefreshLayout.OnRefreshListener { // 向上到顶部 // Toast.makeText(activity, "正在刷新...", Toast.LENGTH_SHORT).show() if(currentPage == 1){ fetchSubData() } else if(currentPage == 2){ globalList_2 = LinkedList<ArticleItem>() listPage = 1 fetchLatestData(listPage) } else if(currentPage == 3){ fetchHotData() } else if(currentPage == 4){ fetchLikestData() } }
实现的效果
相关文章推荐
- Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化
- 创新实训博客(19)——Android开发中Layout组件动态化
- 创新实训博客(33)——探索Android开发中的消息推送功能(推送服务模块进阶设计)
- Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化
- Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化
- 创新实训博客(23)——探索Android开发中的消息推送功能(Notification的学习)
- 创新实训博客(21)——Vue中使用ECharts进行数据可视化(进阶部分)
- 我的Android进阶之旅------>如何为ListView组件加上快速滑块以及修改快速滑块图像
- 创新实训博客(24)——探索Android开发中的消息推送功能(创建通知、创建展开式通知、通过通知打开Activity)
- Android中ListVIew高度自适应,解决ScrollView冲突问题以及Android表格
- Android开发之ImageSwitcher组件的使用以及设置图片切换的效果
- 【FastDev4Android框架开发】Android 列表下拉刷新组件PullToRefreshListView使用(三)
- Android开发进阶(六)--原始XML文件的使用以及PULL解析小例
- 创新实训博客(30)——探索Android开发中的消息推送功能(推送服务模块)
- android应用开发揭秘examples_04-17笔记(Gallery的使用)
- Android高手进阶教程(十九)之---Android开发中,使用线程应该注意的问题!
- android开发------案例三(listview的使用)
- AndroidGUI26:程序中动态设定组件的宽度、高度以及margin等属性
- 在fedora17xfce上使用eclipse开发android程序感受
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!