2016-07-13 9 views
0

私のアプリケーションにはこのチェーンがあります:フラグメントを作成するアクティビティ。このフラグメントには、DialogFragmentを呼び出すボタンのクリックがあります。 DialogFragmentを使用すると、カメラの選択やデバイスメモリからの画像の選択が可能です。DialogFragmentからデータをフラグメント化してレクリエーションアクティビティを生き延びる方法

DialogFragmentは、新しいアクティビティで画像をトリミングするインテントを呼び出します。最後に、切り抜かれたイメージへのパスは、onActivityResultを介してDialogFragmentに返されます。ユーザが何もデバイスの向きを変更するまで

結果のパスがフラグメントに渡さなければならないと私はこのlesson

この溶液のような活動を介して、この使用してインターフェイスを行使は、正常に動作しません。

DialogFragmentステージまたはトリミングアクティビティステージでデバイスをローテーションすると、最初のアクティビティが再作成され、フラグメントが再作成され、DialogFragmentのインスタンスが破棄されます。私のコールバックは実行されていないので、何も起こりません。私はあなたのコードをお見せしましょう:

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()メソッドで保存する必要があります。 Base ActivityのonCreate()メソッド内でこの保持された状態を使用します。あなたがこのおよび検索stackoverflowの上でより多くのgoogleできる

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

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

を参照してください。あなたのような質問には、適切な答えがたくさんあります。

関連する問題