私のアプリケーションにはこのチェーンがあります:フラグメントを作成するアクティビティ。このフラグメントには、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からインターフェースのコールバックを使用してデータを渡すことができるか何の説明がありません。