2016-07-13 3 views
0

Мое приложение имеет эту цепочку: активность, которая создает фрагмент. В этом фрагменте есть кнопка, которая вызывает 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 через операцию фрагмент, если активность воссоздана после поворота.

ответ

0

В принципе, вам необходимо сохранить состояние экземпляра на фрагменте в методе onSaveInstanceState(). затем используйте это сохраненное состояние в методе onCreate() базовой операции.

См:

Once for all, how to correctly save instance state of Fragments in back stack?

и

http://emuneee.com/blog/2013/01/07/saving-fragment-states/

Вы можете Google больше на этом и поиск StackOverflow. Есть много вопросов, таких как ваши, с правильными ответами.

Смежные вопросы