Я работаю над фрагментом, который отображает список изображений.У него есть кнопка «Добавить изображение», которая запускает намерение для результата с этими значениями.
type: "image/*"
action: Intent.ACTION_GET_CONTENT
Проблема заключается в том, что после того, как пользователь выберет изображение и вернется к фрагменту, все остальные изображения всписок (сохраненный в некотором ArrayList <> в коде) исчез.
Я переопределил метод onSaveInstanceState(Bundle)
и сохранил список в комплекте.Дело в том, что нет способа восстановить его обратно.
Я думал о переопределении onViewStateRestored(Bundle)
, но это не сработало.Когда я добавил Log.d()
ко всем методам "onXXX", я обнаружил, что каждый раз, когда я добавляю файл, выполняются только эти три (фактический порядок):
onPause()
onSaveInstanceState(Bundle)
//now the image picker opens up
//user picks the image
onResume()
//image picker closes and fragment is now on screen
Я думал об использовании некоторого "getXXX"метод на onResume()
, но я не могу найти тот, который полезен.Что я могу сделать?
РЕДАКТИРОВАТЬ: Вот мой код (без ненужных вещей).
@Override public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d("debugaff", "oncreate");
setRetainInstance(true);
this.attachments = (ArrayList<Attachment>) getActivity().getIntent().getSerializableExtra(ExtraKeys.ATTACHMENTS);
}
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
Log.d("debugaff", "oncreateview");
rootView = inflater.inflate(R.layout.fragment_attachments_form, container, false);
//....
if(savedInstanceState == null){
getLoaderManager().initLoader(0, null, this);
} else {
attachmentsRvAdapter.setItems((List<Attachment>) savedInstanceState.getSerializable(ExtraKeys.TEMP_ATTACHMENTS));
}
//....
return rootView;
}
@Override public void onResume(){
super.onResume();
Log.d("debugaff", "onresume");
hideKeyboard();
}
@Override public void onPause(){
super.onPause();
setRetainInstance(true); //called this to make it 100% redundant (already called it at onCreate)
Log.d("debugaff", "onpause");
}
@Override public void onViewStateRestored(@Nullable Bundle savedInstanceState){
Log.d("debugaff", "onviewstaterestored");
if(savedInstanceState == null){
getLoaderManager().initLoader(0, null, this);
} else {
attachments.addAll((List<Attachment>) savedInstanceState.getSerializable(ExtraKeys.TEMP_ATTACHMENTS));
attachmentsRvAdapter.setItems(attachments);
}
super.onViewStateRestored(savedInstanceState);
}