2016-04-06 19 views
1

SO, Maintain/Save restore scroll position 'da ünlü bir gönderiye gittim, ancak bana hiç yardımcı olmuyor.Oryantasyon: bir Parça İçinde ListView konumunu geri yükleme

Bir parçanın içinde bir ListView var, oryantasyonu değiştirirsem, saveInstance Bundle konumumu koruyacak olmasını isterim. Ben

private static final String LIST_STATE = "listState"; 
private Parcelable mListState = null; 

@Override 
public void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 

    mListState = listView.onSaveInstanceState(); 
    outState.putParcelable(LIST_STATE, mListState); 

    } 

var ve aşağıdaki kodla

if(savedInstanceState!=null) { 
     mListState = savedInstanceState.getParcelable(LIST_STATE); 
     listView.onRestoreInstanceState(mListState); 

OnCreateView veya onActivityCreated içinde hiç restore edilmez listenin yukarı pozisyonu koyarsanız fark etmez. Kolayca ayıklama Paketi pozisyon tanımak Demet içinde debug görebilir ,

AbsListView.SavedState {3d7562e0 selectedId = -9223372036854775808 firstId = 25 viewTop = -38 noktası = 5 yükseklik = 717 filtre = null checkState = null}

hatta tüm değerleri yerine Demet izole edilmiş bir şekilde bu pozisyonu elde etmek için çalışılmıştır, ama başarılı olamadı. fragmanı

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
} 

cevap

1

eklenti Aşağıdaki kod Buldum!

çözümdür

@Override 
    public void onSaveInstanceState(Bundle outState) { 

     super.onSaveInstanceState(outState); 

mPosition2=listView.getFirstVisiblePosition(); 

if(mPosition2!=0) { 
    mPosition = mPosition2; 
} 

     if (mPosition != ListView.INVALID_POSITION) { 
      outState.putInt(SELECTED_KEY, mPosition); 
     } 
     } 

ve onCreateView içinde

if (savedInstanceState != null && savedInstanceState.containsKey(SELECTED_KEY)) { 
      mPosition = savedInstanceState.getInt(SELECTED_KEY); 

     } 

nihayet (ama sadece ihtiyacınız nereye koyabilirsiniz)

onLoadFinished sonunda bir içerik sağlayıcı sorgulamak bir yükleyici var
if (mPosition != ListView.INVALID_POSITION) { 

     listView.setSelection(mPosition); 

Ayrıca listeyi denedimView.smoothScrollToPosition (mPosition) ama şu anda çalışmıyor, ama boşver bana gerçekten iyi çalışıyor.

+0

İlginiz için çok teşekkürler, ancak setRetainInstance (true) olarak adlandırılırsam, döndürme değiştirirseniz ListView kaybolur – trocchietto

İlgili konular