aja*_*n81 6 android android-ui android-listview android-adapter
我有一个listview,可以根据请求添加其他视图,由BaseAdapter维护.更新后如何保持滚动位置?
我知道这已被问了几次,但每次都提出了相同的解决方案,我已经尝试过,这是adapter.notifyDataSetChanged();在更新包含列表内容的ArrayList之后调用的.
如何确保保持滚动位置?
She*_*ara 12
OnScrollListener在您的活动类中实现一个,然后使用以下代码:
int currentFirstVisibleItem, currentVisibleItemCount, currentTotalItemCount;
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
this.currentFirstVisibleItem = firstVisibleItem;
this.currentVisibleItemCount = visibleItemCount;
this.currentTotalItemCount = totalItemCount;
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
this.currentScrollState = scrollState;
this.isScrollCompleted();
}
private void isScrollCompleted() {
if (currentFirstVisibleItem + currentVisibleItemCount >= currentTotalItemCount) {
if (this.currentVisibleItemCount > 0
&& this.currentScrollState == SCROLL_STATE_IDLE) {
//Do your work
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您AsyncTask用于更新数据,则可以在您的服务PostExecute()中包含以下内容以保持Scroll位置:
list.setAdapter(adapter);
list.setSelectionFromTop(currentFirstVisibleItem, 0);
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
我采取的方法是在更新后调用ListView.setSelection(position)滚动到所需position的方法.
根据您呼叫的位置,您可能需要在呼叫requestFocusFromTouch之前拨打电话setSelection,以确保项目的位置正确.
| 归档时间: |
|
| 查看次数: |
16881 次 |
| 最近记录: |