多个列表切换使用同一个listview,切换时回到各个列表之前的位置

来源:互联网 发布:数学系的学不学编程 编辑:程序博客网 时间:2024/04/19 09:08

使用环境:

      同一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);
}




0 0
原创粉丝点击