2016-04-06 20 views
1

私は、SOの で有名なポストに通っていましたが、私を助けません。方向:フラグメント内にあるListViewの位置を復元する

私は方向を変更した場合、私はsaveInstanceバンドルが私の位置を保存することを希望、フラグメント内のListViewコントロールを持っています。 私は

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); 

    } 

を持っていると私は、次のコード

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

OnCreateViewまたはonActivityCreated内のすべての時に復元されていないリストのアップ位置を置けば問題ありません。私は簡単にデバッグがバンドル内の位置を認識することがバンドル内のデバッグからわかる 、

AbsListView.SavedState {3d7562e0 selectedId = -9223372036854775808 firstId = 25 viewTop = -38位置= 5高さ= 717フィルタ= NULL にcheckState = NULL}

私もすべての値の代わりに、バンドルから単離された方法でこの位置を抽出するために試みたが、成功しませんでした。フラグメント

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

答えて

1

追加次のコードは、それを見つけました!

ソリューションは、最終的に私はonLoadFinishedの終わりに、コンテンツプロバイダに照会ローダーを持っている(ただし、あなたが必要なだけのどこを置くことができる)

@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); 
     } 
     } 

とonCreateView

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

     } 

ある

if (mPosition != ListView.INVALID_POSITION) { 

     listView.setSelection(mPosition); 

私もlistView.smoothScrollToPosition(mPosition)を試しました しかし、現時点では動作していませんが、それは本当に私にはうまく動作する気には決してありません。

+0

ご関心をどうもありがとうございましたが、私はsetRetainInstance(true)を呼び出す場合、私は回転を変更した場合、リストビューが消え – trocchietto

関連する問題