Android使用onConfigurationChanged重置我的listview滚动位置

时间:2015-04-01 08:29:33

标签: android listview

在我的应用中,我与listview聊天活动。我决定使用onConfigurationChanged来保留带有消息的listview,同时用户更改屏幕方向。问题是每次都会重置滚动位置。我如何保持我的滚动位置列表视图。 在清单

<activity
            android:name=".ChatActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
/>

活动

@Override
    public void onConfigurationChanged(android.content.res.Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "orientation changed");
        chatView.setSelection(scrollPosition);
    }

2 个答案:

答案 0 :(得分:0)

删除它:

chatView.setSelection(scrollPosition);

[编辑]

//Save state
Parcelable state = listView.onSaveInstanceState();

//Restore state
listView.onRestoreInstanceState(state);

[EDIT2]:

//Save
int index = mList.getFirstVisiblePosition();
View v = listView.getChildAt(0);
int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop());

//Restore
listView.setSelectionFromTop(index, top);

答案 1 :(得分:0)

如果你写聊天,你可能为listview transcript mode = ALWAYS_SCROLL

添加了

msgListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

此模式在屏幕旋转后将listview滚动到底部。 轮换后,评论和列表位置将保留。

滚动模式您可以更改为强制移动到列表末尾,如下所示:

chatAdapter.notifyDataSetChanged(); int pos = msgListView.getCount()-1; msgListView.setSelection(pos);