1 2 3 4 5 6 7 | // 保存当前第一个可见的item的索引和偏移量 int index = mList.getFirstVisiblePosition(); View v = mList.getChildAt(0); int top = (v == null) ? 0 : v.getTop(); // ... //根据上次保存的index和偏移量恢复上次的位置 mList.setSelectionFromTop(index, top); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /** * Sets the selected item and positi** the selection y pixels from the top edge * of the ListView. (If in touch mode, the item will not be selected but it will * still be positioned appropriately.) * * @param position Index (starting at 0) of the data item to be selected. * @param y The distance from the top edge of the ListView (plus padding) that the * item will be positioned. */ public void setSelectionFromTop(int position, int y) { if(mAdapter == null) { return; } if(!isInTouchMode()) { position = lookForSelectablePosition(position, true); if(position <= 0) { setNextSelectedPositionInt(position); } } else{ mResurrectToPosition = position; } if(position <= 0) { mLayoutMode = LAYOUT_SPECIFIC; mSpecificTop = mListPadding.top + y; if(mNeedSync) { mSyncPosition = position; mSyncRowId = mAdapter.getItemId(position); } requestLayout(); } } |
1 2 3 4 5 6 7 8 9 10 11 | /** * Sets the currently selected item. If in touch mode, the item will not be selected * but it will still be positioned appropriately. If the specified selection position * is less than 0, then the item at position 0 will be selected. * * @param position Index (starting at 0) of the data item to be selected. */ @Override public void setSelection(int position) { setSelectionFromTop(position, 0); } |
欢迎光临 SuperIC社区_ (/) | Powered by Discuz! X3.3 |