2015-05-06 5 views
0

Я изо всех сил пытаюсь восстановить свою позицию в списке на изменение конфигурации вращения экрана.как установить позицию списка после изменения конфигурации

Среди многих вещей, которые я пробовал, я пришел к этому:

 @Override 
     public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      if (savedInstanceState == null) { 
... 
       mVisibleItem = -1; 
      } else { 
       if (savedInstanceState.containsKey(LV_VISIBLE_ITEM)) { 
        mVisibleItem = savedInstanceState.getInt(LV_VISIBLE_ITEM); 
       } 
      } 
      setRetainInstance(true); 
     } 

и здесь я пытаюсь установить позицию в ListView

@Override 
public void onResume() { 
    super.onResume(); 
    if (mVisibleItem > 0) { 
     mlvDictionaryIndex.setSelectionFromTop(mVisibleItem, 0); 
    } 
} 

Однако, к моему удивлению, , после поворота экрана и просмотра mVisibleItem устанавливается с правильным значением, в onResume я вижу, что mVisibleItem равно -1. Как так?

ответ

1

использование onSavedInstanceState писать в пачке возвращаемого значения ListView.onSaveInstanceState(), и восстановить его onActivityCreated

@Override 
public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     if (mListView != null) { 
      outState.putParcelable(LISTVIEW_INTERNAL_STATE_KEY, mListView.onSaveInstanceState()); 
     } 
} 

после данных перезагрузки, то вы можете позвонить

mListView.onRestoreInstanceState(savedInstanceState.getParcelable(LISTVIEW_INTERNAL_STATE_KEY)); 
0

Override onSaveInstanceState, такие как ниже»

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putInt("pos", pos); 
} 

T курица в вашем методе onCreate прочитала файл savedInstanceState, чтобы проверить, является ли это изменением ориентации или новым действием.

private int pos = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
    //This is a new activity 
    }else{ 
     pos = savedInstanceState.getInt(""); 
    } 

Теперь у вас есть позиция в списке, и вы можете прокручивать ее до изменения конфигурации.

0

Возможно, после перезагрузки данных в listview код ниже будет работать.

mlvDictionaryIndex.setSelectionFromTop(mVisibleItem, 0); 

Таким образом, вы можете использовать post() метод, так же, как показано ниже:

post(new Runnable() { 
    public void run() { 
     mlvDictionaryIndex.setSelectionFromTop(mVisibleItem, 0); 
    } 
}); 
Смежные вопросы