Fixed recovery of position list when browsing up after two rotations

This commit is contained in:
David A. Velasco 2015-02-18 11:29:31 +01:00
parent 2cfed6eaa7
commit fc435f64f0
2 changed files with 13 additions and 3 deletions

View file

@ -23,6 +23,8 @@ import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ListView;
import com.owncloud.android.lib.common.utils.Log_OC;
/**
* ListView allowing to specify the position of an item that should be centered in the visible area, if possible.
*
@ -32,6 +34,8 @@ import android.widget.ListView;
*/
public class ExtendedListView extends ListView {
private static final String TAG = ExtendedListView.class.getSimpleName();
private int mPositionToSetAndCenter = 0;
public ExtendedListView(Context context) {
@ -55,6 +59,7 @@ public class ExtendedListView extends ListView {
protected void onDraw (Canvas canvas) {
super.onDraw(canvas);
if (mPositionToSetAndCenter > 0) {
Log_OC.v(TAG, "Centering around position " + mPositionToSetAndCenter);
this.setSelectionFromTop(mPositionToSetAndCenter, getHeight() / 2);
mPositionToSetAndCenter = 0;
}

View file

@ -139,8 +139,13 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
if (savedInstanceState != null) {
int referencePosition = savedInstanceState.getInt(KEY_SAVED_LIST_POSITION);
mListView.setAndCenterSelection(referencePosition);
mGridView.setSelection(referencePosition);
if (mCurrentListView == mListView) {
Log_OC.v(TAG, "Setting and centering around list position " + referencePosition);
mListView.setAndCenterSelection(referencePosition);
} else {
Log_OC.v(TAG, "Setting grid position " + referencePosition);
mGridView.setSelection(referencePosition);
}
}
// Pull-down to refresh layout
@ -227,7 +232,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
final int firstPosition = mFirstPositions.remove(mFirstPositions.size() -1);
int top = mTops.remove(mTops.size() - 1);
Log_OC.d(TAG, "Setting selection to position: " + firstPosition + "; top: " + top + "; index: " + index);
Log_OC.v(TAG, "Setting selection to position: " + firstPosition + "; top: " + top + "; index: " + index);
if (mCurrentListView == mListView) {
if (mHeightCell*index <= mListView.getHeight()) {