Android listview定位到上次显示的位置的实现方法 整体思路:滑动lictview时,记录listview的位置,定位时定位到该位置。 1、添加全局变量 private int scrolledX = 0; private int scrolledY = 0; 2、Oncreate()添加滚动事件监听 ClassesLV.setOnScrollListener(new OnScrollListener() { /** * 滚动状态改变时调用 */ @Override public void onScroll(AbsListView view, int firstVisibleI 在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在用户操作应用时,有时我们需要在应用重新打开或切换后,将ListView滚动到用户之前查看的位置,以便提供更好的用户体验。下面详细介绍如何实现这一功能。 我们需要在Activity中添加两个全局变量来存储ListView的滚动位置: ```java private int scrolledX = 0; private int scrolledY = 0; ``` `scrolledX` 代表ListView第一条可见项的索引,而 `scrolledY` 用于记录第一条可见项距离顶部的距离。 接着,在Activity的 `onCreate()` 方法中,我们需要为ListView设置一个滚动监听器: ```java ClassesLV.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {} @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { try { // 当滚动停止时,记录当前位置 scrolledX = view.getFirstVisiblePosition(); Log.i("scroll X", String.valueOf(scrolledX)); scrolledY = view.getChildAt(0).getTop(); Log.i("scroll Y", String.valueOf(scrolledY)); } catch (Exception e) { // 处理可能出现的异常 } } } }); ``` 这里,我们在 `onScrollStateChanged()` 的回调中判断滚动状态是否变为IDLE(即静止状态),如果是,就获取并记录ListView的当前位置。 然后,我们需要在Activity的生命周期方法中处理ListView的滚动恢复。例如,在 `onResume()` 或者自定义的 `onBack()` 方法中: ```java public void onBack() { ClassesLV.setSelectionFromTop(scrolledX, scrolledY); } @Override protected void onResume() { // 当Activity恢复时,恢复ListView的滚动位置 onBack(); // 初始化数据等其他操作 // initDataFromNet(); isClick = 0; super.onResume(); } ``` `setSelectionFromTop()` 方法用于设置ListView的滚动位置,第一个参数是项的索引,第二个参数是从顶部开始的像素值。 此外,还需要注意,如果你的应用有多个Activity或者Fragment,你可能需要在保存和恢复界面状态时使用 `onSaveInstanceState()` 和 `onRestoreInstanceState()`,或者使用静态变量来跨Activity/Fragment共享这些滚动位置信息。 实现Android ListView定位到上次显示的位置,主要涉及以下几个步骤: 1. 定义并初始化滚动位置变量。 2. 设置ListView的滚动监听器,当滚动停止时记录当前位置。 3. 在Activity恢复时调用 `setSelectionFromTop()` 来恢复滚动位置。 这个实现方法对于提供一致性和用户友好的体验非常有用,尤其是在浏览长列表时。同时,也可以结合其他的优化技术,如使用View Holder提高ListView的滚动性能,或者利用AsyncTask加载数据,以实现更流畅的用户体验。
- 粉丝: 9
- 资源: 932
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Udemy 课程 - 面向软件开发人员的 Java 编程大师班 讲师 - Tim Buchalka.zip
- Udemy 上的现代 JavaScript(从新手到忍者)课程的所有讲座文件 .zip
- Thumbnailator - Java 的缩略图生成库.zip
- The Net Ninja YouTube 频道上的 JavaScript DOM 教程的所有课程文件 .zip
- Swagger Spec 到 Java POJO.zip
- Stripe API 的 Java 库 .zip
- RxJava 2 和 Retrofit 结合使用的几个最常见的使用方式举例.zip
- RxJava 2 Android 示例 - 如何在 Android 中使用 RxJava 2.zip
- 上传OpenCV开发资源OpenCv开发资源
- Spring Boot与Vue 3前后端分离技术详解及应用