Мое приложение имеет эту цепочку: активность, которая создает фрагмент. В этом фрагменте есть кнопка, которая вызывает DialogFragment. DialogFragment позволяет пользователю выбирать камеру или выбирать изображение из памяти устройства.Как получить данные из DialogFragment to Fragment и выжить в рекреационной деятельности
Than DialogFragment вызывает намерение, которое отправляет изображение для обрезки при новом действии. И окончательный путь к обрезанному изображению отправляется обратно в DialogFragment через onActivityResult.
Полученный путь должен быть передан фрагмент и я осуществить это с помощью интерфейса через деятельность, как в этом lesson
Это решение нормально работает до тех пор, пока пользователь не изменяет ориентацию устройства.
Когда устройство повернулось на этапе диалога или этапа обработки урожая, первая активность воссоздана, а fragemnt воссоздана, а экземпляр объекта DialogFragment уничтожен. Поэтому мой callback не работает и ничего не происходит. Позвольте мне показать вам код:
SettingUnitActivity
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
addNewUnitFragment = new AddNewUnitFragment();
fragmentTransaction.replace(R.id.single_unit_fragment_container,addNewUnitFragment,"myff");
fragmentTransaction.commit();
//My callback
@Override
public void call(String string) {
AddNewUnitFragment addNewUnitFragment = (AddNewUnitFragment)
getFragmentManager().findFragmentById(R.id.single_unit_fragment_container);
if(addNewUnitFragment != null) {
addNewUnitFragment.changeFragImage(string);
} else {
}
}
AddNewUnitFragment
public void onClick(View v) {
switch (v.getTag().toString()) {
case "add_image":
DialogImageSelect imageSelDialog = DialogImageSelect.newInstance(0);
imageSelDialog.show(getFragmentManager(),"imageSelDialog");
break;
...
//Function which should be called from SettingUnitActivity
public void changeFragImage (String string) {
//Do something with string
}
DialogImageSelect
public static interface dateCallBack {
public abstract void call(String string);
}
static DialogImageSelect newInstance(int id) {
DialogImageSelect di = new DialogImageSelect();
Bundle args = new Bundle();
args.putInt("id", id);
di.setArguments(args);
return di;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callerActivity = (dateCallBack)activity;
}
//Here we take and send image path from croper activity
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode != Activity.RESULT_CANCELED) {
if(requestCode == FROM_CROPPER) {
if(data != null) {
croppedFilePath = data.getStringExtra("filePath");
System.out.println("CALL "+callerActivity);
this.callerActivity.call(croppedFilePath);
dismiss();
}
}
}
}
Как я могу отправить данные фрагмента подпорных, когда устройство вращается?
UPD: Ответ на мой вопрос частично раскрывается в this темы, но нет объяснения, как я мог передавать данные с помощью интерфейса обратного вызова из DialogFragment через операцию фрагмент, если активность воссоздана после поворота.