android expandablelist 自动滚动,在ExpandableListView中,如何保留滚动位置_android_开发99编程知识库...

在一些实验之后我做了一个满意的解决,它还保留了很好的滚动位置顶部可见项。

事实上,三种不同部分的信息需要保存和恢复: 状态( e .g列表。 其中组被展开),第一个可见项的索引和优良滚动位置。

不幸的是,似乎只有第一个保存由onSaveInstanceState可展开列表视图的方法,所以其他两个需要单独存储。 这不同于非可展开列表视图,其中,看来在onSaveInstanceState方法保存所需要的所有信息正确的恢复状态和位置列表( 对于这个主题,参看 Scroll到中的某一位置listView ) 。?

下面是代码段,之上ExpandableListActivity派生类:private static final String LIST_STATE_KEY = "listState";

private static final String LIST_POSITION_KEY = "listPosition";

private static final String ITEM_POSITION_KEY = "itemPosition";

private Parcelable mListState = null;

private int mListPosition = 0;

private int mItemPosition = 0;

然后,一些继承自:protected void onRestoreInstanceState(Bundle state) {

super.onRestoreInstanceState(state);

// Retrieve list state and list/item positions

mListState = state.getParcelable(LIST_STATE_KEY);

mListPosition = state.getInt(LIST_POSITION_KEY);

mItemPosition = state.getInt(ITEM_POSITION_KEY);

}

protected void onResume() {

super.onResume();

// Load data from DB and put it onto the list

loadData();

// Restore list state and list/item positions

ExpandableListView listView = getExpandableListView();

if (mListState != null)

listView.onRestoreInstanceState(mListState);

listView.setSelectionFromTop(mListPosition, mItemPosition);

}

protected void onSaveInstanceState(Bundle state) {

super.onSaveInstanceState(state);

// Save list state

ExpandableListView listView = getExpandableListView();

mListState = listView.onSaveInstanceState();

state.putParcelable(LIST_STATE_KEY, mListState);

// Save position of first visible item

mListPosition = listView.getFirstVisiblePosition();

state.putInt(LIST_POSITION_KEY, mListPosition);

// Save scroll position of item

View itemView = listView.getChildAt(0);

mItemPosition = itemView == null ? 0 : itemView.getTop();

state.putInt(ITEM_POSITION_KEY, mItemPosition);

}

它也能在我Froyo设备。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值