您的位置:首页 > 其它

多个列表切换使用同一个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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐