多个列表切换使用同一个listview,切换时回到各个列表之前的位置
2014-07-17 13:21
453 查看
使用环境:
同一Activity上,不同列表之间进行切换,使用同一个listview,切换时set不同adapter。每个列表需要有上拉加载的功能。
这时候如果使用 myAdapter.notifyInfo(list); myAdapter.notifyDataSetChanged();设置数据 ,虽然可以保证上拉加载后列表显示在当前页, 但是列表切换时没有给listview重新设置适配器,列表内容不会切换。
如果每次都重新setadapter ,则每次上拉加载后列表都会显示在第一页第一条数据。以下方法可以解决这个问题。(其实使用多个listview会更方便,如果其他条件限制了只能使用一个listview则可以用以下方法解决问题)
(1)对listview设置滚动监听事件
listview.setOnScrollListener(new OnScrollListener() {
/**
* 滚动状态改变时调用
*/
@Override
public void onScrollStateChanged(AbsListView view,
int scrollState) {
// 不滚动时保存当前滚动到的位置
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
/* 记录两种(或更多)显示方式下 listview各自的位置 */
if (showType == 1) {
position1= lvComment.getFirstVisiblePosition();
} else if(showType=2){
position2 = lvComment.getFirstVisiblePosition();
}
}
}
/**
* 滚动时调用
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
(2)显示 并设置位置
切换到列表1时:
if (adapter1 == null) {
timeAdapter = new Adapter1(this,
android.R.layout.simple_list_item_1, list1);
listview.setAdapter(adapter1);
} else {
// 刷新数据
adapter1.notifyInfo(list1);//此方法为adapter中写的方法
// 设置适配器
listview.setAdapter(adapter1);
// 显示在之前显示的item上
listview.setSelection(position1);
}
切换到列表2时:
if (adapter2 == null) {
timeAdapter = new Adapter2(this,
android.R.layout.simple_list_item_1, list2);
listview.setAdapter(adapter2);
} else {
// 刷新数据
adapter2.notifyInfo(list2);
// 设置适配器
listview.setAdapter(adapter2);
// 显示在之前显示的item上
listview.setSelection(position2);
}
同一Activity上,不同列表之间进行切换,使用同一个listview,切换时set不同adapter。每个列表需要有上拉加载的功能。
这时候如果使用 myAdapter.notifyInfo(list); myAdapter.notifyDataSetChanged();设置数据 ,虽然可以保证上拉加载后列表显示在当前页, 但是列表切换时没有给listview重新设置适配器,列表内容不会切换。
如果每次都重新setadapter ,则每次上拉加载后列表都会显示在第一页第一条数据。以下方法可以解决这个问题。(其实使用多个listview会更方便,如果其他条件限制了只能使用一个listview则可以用以下方法解决问题)
(1)对listview设置滚动监听事件
listview.setOnScrollListener(new OnScrollListener() {
/**
* 滚动状态改变时调用
*/
@Override
public void onScrollStateChanged(AbsListView view,
int scrollState) {
// 不滚动时保存当前滚动到的位置
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
/* 记录两种(或更多)显示方式下 listview各自的位置 */
if (showType == 1) {
position1= lvComment.getFirstVisiblePosition();
} else if(showType=2){
position2 = lvComment.getFirstVisiblePosition();
}
}
}
/**
* 滚动时调用
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
(2)显示 并设置位置
切换到列表1时:
if (adapter1 == null) {
timeAdapter = new Adapter1(this,
android.R.layout.simple_list_item_1, list1);
listview.setAdapter(adapter1);
} else {
// 刷新数据
adapter1.notifyInfo(list1);//此方法为adapter中写的方法
// 设置适配器
listview.setAdapter(adapter1);
// 显示在之前显示的item上
listview.setSelection(position1);
}
切换到列表2时:
if (adapter2 == null) {
timeAdapter = new Adapter2(this,
android.R.layout.simple_list_item_1, list2);
listview.setAdapter(adapter2);
} else {
// 刷新数据
adapter2.notifyInfo(list2);
// 设置适配器
listview.setAdapter(adapter2);
// 显示在之前显示的item上
listview.setSelection(position2);
}
相关文章推荐
- Joomla!中如何使用switcher.js实现一个位置上div层的切换显示 【转】
- 使用多种数据 切换 ,共用一个listView必须注意的三个异常
- 一个可变布局列表,有9种布局item大小,每个item可拖拽切换位置
- android ListView 重新进入后如何回到之前位置
- Android开发从入门到放弃(8)使用ListView显示一个简单的列表
- 一个视频播放列表demo,视频播放使用的ijkplayer,正在播放视频拖动到不可见区域小窗口播放,可全屏切换
- android列表视图切换:GridView和ListView两种方式来显示一个列表
- android列表视图切换:GridView和ListView两种方式来显示一个列表
- Activity在GridView和ListView之间切换使用一个布局实现的方法
- Orchard:把之前写的Map Content Part专为一个Widget来使用
- 使用一个程序同时启动多个程序(c#) 收藏
- 使用c#创建一个可以监视全局鼠标位置的程序
- 使用 ASP.NET MVC 创建一个任务列表应用程序
- 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名
- C# B/S程序中使用DropDownList出现System.ArgumentOutOfRangeException: “DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中的解决方法
- [转]使用 ASP.NET MVC 创建一个任务列表应用程序
- C#基础之温习--使用列表和链表实现优一个先级队列
- 在apache中配置多个站点使用同一个ip
- ListView控件演示06:如何实现用户同时选择多个列表项
- 一个保存数据的方法(可以切换存放的位置,可以设置密钥)