为了保存ListView的滚动位置,你可以使用以下方法:
以下是一个示例代码:
public class MyActivity extends AppCompatActivity {
private ListView listView;
private int lastVisibleItemPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
// 设置ListView的滚动监听器
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// 滚动停止时保存当前可见的第一个item的位置
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
View firstVisibleItem = listView.getChildAt(0);
lastVisibleItemPosition = listView.getFirstVisiblePosition();
if (firstVisibleItem != null) {
lastVisibleItemPosition += firstVisibleItem.getTop() / firstVisibleItem.getHeight();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// 滚动中的逻辑处理
}
});
// 恢复滚动位置
if (savedInstanceState != null) {
lastVisibleItemPosition = savedInstanceState.getInt("lastVisibleItemPosition");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 保存滚动位置
outState.putInt("lastVisibleItemPosition", lastVisibleItemPosition);
}
@Override
protected void onResume() {
super.onResume();
// 恢复滚动位置
listView.setSelection(lastVisibleItemPosition);
}
}
这样,当你的ListView重新加载时,它将滚动到之前保存的位置。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅为示例,你可以根据实际需求选择适合的腾讯云产品。
领取专属 10元无门槛券
手把手带您无忧上云