このフラグメントをホストするアクティビティは、カメラアクティビティが戻ったときに呼び出されるonActivityResult
を持ちます。
私の断片は、カメラに写真を撮るために送られた意図で結果のための活動を始めます。画像アプリケーションは正常にロードされ、写真を撮り、そして戻ります。しかしonActivityResult
はヒットしません。ブレークポイントを設定しましたが、何もトリガーされません。フラグメントはonActivityResult
を持つことができますか?それは提供されている機能なので、私はそう思うでしょう。なぜこれが引き起こされないのですか?
ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);
myImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent cameraIntent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1888);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if( requestCode == 1888 ) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);
}
}
ホスティングアクティビティはonActivityResult()
をオーバーライドしますが、未処理の結果コードについてはsuper.onActivityResult()
を呼び出しませんでした。明らかに、フラグメントがstartActivityForResult()
呼び出しを行うものであっても、アクティビティは結果を処理する際に最初のショットを取得します。フラグメントのモジュール性を考えるとき、これは理にかなっています。未処理のすべての結果に対してsuper.onActivityResult()
を実装すると、フラグメントは結果を処理することに弾みを付けました。
そしてまた@siqing答えから:
フラグメントの結果を取得するには、フラグメント内でstartActivityForResult(intent,111);
ではなくgetActivity().startActivityForResult(intent,111);
を呼び出すようにしてください。
私はあなたがgetActivity().startActivityForResult(intent,111);
と呼んだと思います。あなたはstartActivityForResult(intent,111);
を呼ぶべきです。
オプション1:
フラグメントからstartActivityForResult()
を呼び出す場合は、フラグメントonActivityResult()になるので、startActivityForResult()
ではなくgetActivity().startActivityForResult()
を呼び出す必要があります。
startActivityForResult()
のどこで呼び出しているのか、またどのようにしてメソッドを呼び出すのかわからない場合。
オプション2:
ActivityはonActivityResult()
の結果を取得するので、アクティビティのonActivityResult()
をオーバーライドし、super.onActivityResult()
を呼び出して未処理の結果コードまたはすべてのフラグメントに伝播する必要があります。
上記の2つのオプションが機能しない場合は、オプション3を参照してください。
オプション3:
FragmentからonActivityResult関数への明示的な呼び出しは以下のとおりです。
親のActivityクラスで、onActivityResult()メソッドをオーバーライドし、さらにFragmentクラスで同じメソッドをオーバーライドして、次のコードとして呼び出します。
親クラスで:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
}
子クラスで:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// In fragment class callback
}
あなたのアクティビティの中のフラグメントがわからない場合は、それらすべてを列挙してアクティビティの結果引数を送るだけです。
// In your activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
私はChildFragmentManager
についても同じ問題を抱えています。マネージャはネストしたフラグメントに結果を渡さないでしょう、あなたはあなたのベースフラグメントでそれを手動でしなければなりません。
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Fragment fragment = (Fragment) getChildFragmentManager().findFragmentByTag(childTag);
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, intent);
}
}
FragmentActivity
はrequestCode
を修正したものに置き換えます。その後、onActivityResult()
が呼び出されると、FragmentActivity
は上位16ビットを解析して元のフラグメントのインデックスを復元します。このスキームを見てください。
ルートレベルにいくつかのフラグメントがある場合は問題ありません。しかし、 ネストしたフラグメント がある場合、例えばFragment
の中にいくつかのタブがあるViewPager
の場合、あなたは保証された問題に直面するでしょう(またはすでに直面している).
1つのインデックス のみがrequestCode
内に格納されるためです。それはFragment
の中のFragmentManager
のインデックスです。入れ子になったフラグメントを使用しているとき、それ自身のフラグメントのリストを持つ子FragmentManager
sがあります。そのため、ルートのFragmentManager
から始めて、インデックスのチェーン全体を保存する必要があります。
どうすればこの問題を解決できますか? この投稿には 一般的な回避策があります 。
これは最も人気のある問題の1つです。この問題に関してはたくさんのスレッドがあります。しかし、それらのどれもMEに役立ちません。
だから私はこの解決策を使ってこの問題を解決しました。
最初にこれが起こっている理由を理解しましょう。
Fragmentから直接startActivityForResult
を呼び出すことができますが、実際には後ろのメカニックはすべてActivityによって処理されます。
FragmentからstartActivityForResult
を呼び出すと、requestCodeはFragmentのIDをコードに付加するように変更されます。それは、結果が受け取られたらこのリクエストを送った人をActivityが追跡できるようにします。
アクティビティが戻ってナビゲートされると、結果は変更されたrequestCodeと共にActivityのonActivityResultに送信され、元のrequestCode + FragmentのIDにデコードされます。その後、ActivityはonActivityResultを通じてActivity Resultをそのフラグメントに送信します。そしてそれはすべて完了です。
問題は:
Activityは、Activityに直接アタッチされているがネストされていないフラグメントのみに結果を送信できます。それが、入れ子になったフラグメントのonActivityResultが何に関係なく呼び出されることがなかった理由です。
解決策:
1)以下のコードであなたのフラグメントの中にIntentを始めてください:
/** Pass your fragment reference **/
frag.startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE = 12345
2)親アクティビティで、今度は** onActivityResult()
:をオーバーライドします。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
これを機能させるには、親アクティビティでこれを呼び出す必要があります。
3)あなたのフラグメント呼び出しで:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
}
}
それでおしまい。このソリューションでは、ネストされているかどうかにかかわらず、単一のフラグメントに適用できます。そしてはい、それはまたすべてのケースをカバーしています!また、コードも素敵できれいです。
たくさんの入れ子になった断片のために(例えば、断片でViewPagerを使うとき)
あなたの主な活動の中で :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
あなたのフラグメントでは:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getChildFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
入れ子になったフラグメントの中
通話アクティビティ
getParentFragment().startActivityForResult(intent, uniqueInstanceInt);
uniqueInstanceInt - 別のフラグメントが答えを扱わないようにするために、入れ子になったフラグメントの中でユニークなintに置き換えてください。
応答を受け取る
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == uniqueInstanceInt ) {
// TODO your code
}
}
注意
「requestCodeには下位16ビットしか使用できない」というエラーを回避するために、uniqueInstanceIntに0から65536までの数値を使用する必要があります。
それでもできない場合は、2つのアドバイスを追加できます。 Manifest.xmlファイルで、コールバック時にホスティングアクティビティが終了しなかったこと、および開始されるアクティビティの起動モードが標準であることを確認します。下記の詳細を参照してください。
ホスティングアクティビティの場合は、no historyプロパティをfalseに設定します。
Android:noHistory="false"
アクティビティを開始するには、起動モードを標準として設定します。
Android:launchMode="standard"
私もこの問題にフラグメントで遭遇しました。そして私はstartActivityForResult
の中でDialogFragment
を呼び出しました。
しかし、この問題は解決されました。 FragmentClassname.this.startActivityForResult
。
このコードブロックを Fragment の外側から Utility Class にシフトし、parentActivity
を argument として渡した場合も、同じ問題に直面していました。
Intent intent = new Intent(parentActivity, CameraCaptureActivity.class);
parentActivity.startActivityForResult(intent,requestCode);
それから、その Fragment のonActivityResult
メソッドで値を取得できませんでした。その後、 引数 を Fragment に変更したので、methodの改訂された定義は次のようになりました。
Intent intent = new Intent(fragment.getContext(), CameraCaptureActivity.class);
fragment.startActivityForResult(intent,requestCode);
その後、 フラグメントのonActivityResult
に値を入れることができました
解決策1:
startActivityForResult(intent, REQUEST_CODE);
の代わりにgetActivity().startActivityForResult(intent, REQUEST_CODE);
を呼び出します。
解決策2:
startActivityForResult(intent, REQUEST_CODE);
が呼び出されると、アクティビティのonActivityResult(requestCode,resultcode,intent)
が呼び出され、次にrequestCode, resultCode and intent
を渡してここからfragments onActivityResult()
を呼び出すことができます。
あなたの主な活動では:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
メインのトップレベルのフラグメント(ViewPagerのフラグメント)では、次のようになります。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
YourFragment frag = (YourFragment) getChildFragmentManager().getFragments().get(viewPager.getCurrentItem());
frag.yourMethod(data); // Method for callback in YourFragment
super.onActivityResult(requestCode, resultCode, data);
}
YourFragment(入れ子になったフラグメント)の場合:
public void yourMethod(Intent data){
// Do whatever you want with your data
}
あなたのフラグメントの中で、電話してください
this.startActivityForResult(intent, REQUEST_CODE);
ここでthis
はフラグメントを参照しています。そうでなければ@Clevesterが言ったようにする:
Fragment fragment = this;
....
fragment.startActivityForResult(intent, REQUEST_CODE);
私も電話しなければならなかった
super.onActivityResult(requestCode, resultCode, data);
それを機能させるために親アクティビティのonActivityResult
で。
(私は@ Clevesterの答えからこの答えを修正しました。)
要するに、
フラグメントでは、Fragment fragment = this
を宣言します。
その後はfragment.startActivityForResult
を使ってください。
結果はactivityResultに返されます。
私の場合はAndroidのバグでした( http://technet.weblineindia.com/mobile/onactivityresult-not-getting-called-in-nested-fragments-Android/ )、サポートしているFragmentActivity
を使用している場合getSupportFragmentManager
の代わりにgetChildFragmentManager
を使用するには、次のようにします。
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
if(fragment instanceof UserProfileFragment) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
public class takeimage extends Fragment {
private Uri mImageCaptureUri;
private static final int PICK_FROM_CAMERA = 1;
private static final int PICK_FROM_FILE = 2;
private String mPath;
private ImageView mImageView;
Bitmap bitmap = null;
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.activity_send_image, container, false);
final String[] items = new String[] { "From Camera", "From SD Card" };
mImageView = (ImageView)view.findViewById(R.id.iv_pic);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), Android.R.layout.select_dialog_item, items);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Select Image");
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (item == 0) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "tmp_avatar_"
+ String.valueOf(System.currentTimeMillis())
+ ".jpg");
mImageCaptureUri = Uri.fromFile(file);
try {
intent.putExtra(
Android.provider.MediaStore.EXTRA_OUTPUT,
mImageCaptureUri);
intent.putExtra("return-data", true);
getActivity().startActivityForResult(intent,
PICK_FROM_CAMERA);
} catch (Exception e) {
e.printStackTrace();
}
dialog.cancel();
} else {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
getActivity().startActivityForResult(
Intent.createChooser(intent,
"Complete action using"), PICK_FROM_FILE);
}
}
});
final AlertDialog dialog = builder.create();
Button show = (Button) view.findViewById(R.id.btn_choose);
show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Switch the tab content to display the list view.
dialog.show();
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK)
return;
if (requestCode == PICK_FROM_FILE) {
mImageCaptureUri = data.getData();
// mPath = getRealPathFromURI(mImageCaptureUri); //from Gallery
if (mPath == null)
mPath = mImageCaptureUri.getPath(); // from File Manager
if (mPath != null)
bitmap = BitmapFactory.decodeFile(mPath);
} else {
mPath = mImageCaptureUri.getPath();
bitmap = BitmapFactory.decodeFile(mPath);
}
mImageView.setImageBitmap(bitmap);
}
public String getRealPathFromURI(Uri contentUri) {
String [] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(contentUri, proj, null, null,null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
フラグメントbaseActivity.startActivityForResult
のBaseActivity onActivityResult
をオーバーライドするだけです。
BaseActivityでインターフェースを追加し、onActivityResultをオーバーライドします。
private OnBaseActivityResult baseActivityResult;
public static final int BASE_RESULT_RCODE = 111;
public interface OnBaseActivityResult{
void onBaseActivityResult(int requestCode, int resultCode, Intent data);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(getBaseActivityResult() !=null && requestCode == BASE_RESULT_RCODE){
getBaseActivityResult().onBaseActivityResult(requestCode, resultCode, data);
setBaseActivityResult(null);
}
フラグメントでOnBaseActivityResult
を実装しています
@Override
public void onBaseActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("RQ","OnBaseActivityResult");
if (data != null) {
Log.d("RQ","OnBaseActivityResult + Data");
Bundle arguments = data.getExtras();
}
}
この回避策はうまくいくでしょう。
上記の問題が Facebookログイン に直面している場合は、次のコードをフラグメントの親アクティビティで使用できます。
Fragment fragment = getFragmentManager().findFragmentById(Android.R.id.tabcontent);
fragment.onActivityResult(requestCode, resultCode, data);
または:
Fragment fragment = getFragmentManager().findFragmentById("fragment id here");
fragment.onActivityResult(requestCode, resultCode, data);
そしてあなたのフラグメントに以下の呼び出しを追加してください...
callbackManager.onActivityResult(requestCode, resultCode, data);
これらの答えのほとんどは、あなたがあなたのActivity
のためにあなたのHost Fragment
のsuper.onActivityResult(...)
を呼ばなければならないと言い続けています。しかし、それは私のために働いていないようでした。
だから、あなたのホストではActivity
あなたは代わりにあなたのFragments
をonActivityResult(...)
と呼ぶべきです。これが一例です。
public class HostActivity extends Activity {
private MyFragment myFragment;
protected void onActivityResult(...) {
super.onActivityResult(...);
this.myFragment.onActivityResult(...);
}
}
あなたのHostActivity
のある時点で、あなたはthis.myFragment
をあなたが使っているFragment
に割り当てる必要があるでしょう。あるいは、FragmentManager
に参照を保持する代わりに、Fragment
を使用してHostActivity
を取得します。また、this.myFragment.onActivityResult(...);
を呼び出そうとする前にnull
を確認してください。
私の問題は、セットAndroid:launchMode="standard"
で見つけたホストアクティビティにありました。一時的に削除して動作しました。
あなたのコードは入れ子になったフラグメントを持っています。 super.onActivityForResultを呼び出しても動作しません
フラグメントを呼び出すことができるすべてのアクティビティを変更したり、フラグメントチェーン内のすべてのフラグメントを呼び出して回避したりする必要はありません。
これは多くの実用的な解決策のうちの1つです。オンザフライでフラグメントを作成し、サポートフラグメントマネージャを使用してアクティビティに直接配線します。次に、新しく作成したフラグメントからstartActivityForResultを呼び出します。
private void get_UserEmail() {
if (view == null) {
return;
}
((TextView) view.findViewById(R.id.tvApplicationUserName))
.setText("Searching device for user accounts...");
final FragmentManager fragManager = getActivity().getSupportFragmentManager();
Fragment f = new Fragment() {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
startActivityForResult(AccountPicker.newChooseAccountIntent(null, null,
new String[]{"com.google"}, false, null, null, null, null), REQUEST_CODE_PICK_ACCOUNT);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
String mEmail = "";
if (resultCode == Activity.RESULT_OK) {
if (data.hasExtra(AccountManager.KEY_ACCOUNT_NAME)) {
mEmail = data
.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
}
}
if (mActivity != null) {
GoPreferences.putString(mActivity, SettingApplication.USER_EMAIL, mEmail);
}
doUser();
}
super.onActivityResult(requestCode, resultCode, data);
fragManager.beginTransaction().remove(this).commit();
}
};
FragmentTransaction fragmentTransaction = fragManager
.beginTransaction();
fragmentTransaction.add(f, "xx" + REQUEST_CODE_PICK_ACCOUNT);
fragmentTransaction.commit();
}
私は、ここでの答えはすべてハックにすぎないと強く疑っています。私はそれらをすべてそして他の多くを試みたが、ある種のばかな問題がいつもあるので信頼できる結論なしで。矛盾する結果に頼ることはできません。 Fragmentsの公式Android APIドキュメントを見ると、Googleには次のように明記されています。
フラグメントを含むActivityからstartActivityForResult(Intent、int)を呼び出します。
参照項目: Android Fragment API
したがって、最も正確で信頼性の高い方法は、実際にホスティングアクティビティから startActivityForResult() を呼び出し、そこから結果として得られる onActivityResult() を処理することです。
Ollie Cが言及したように、ネストされたフラグメントを使用しているときにonActivityResultへの戻り値を使用するサポートライブラリには活発なバグがあります。私はちょうどそれを打った: - (。
を参照してください。requestCode!= 0の場合、Fragment.onActivityResultは呼び出されません。
私はただ回避方法を作ります:
public static Fragment _tempFragment = null;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(_tempFragment != null)
_tempFragment.onActivityResult(requestCode, resultCode, data);
}
あなたのフラグメントの中で、startActivityResultの前に、
MainActivity._tempFragment = this;
OnActivityResult < - の後にフラグメント
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Do your job
{
}
MainActivity._tempFragment = null;
}
他の回答でまだ説明されていない別のユースケース:
onActivityResult()
を使用すると、フラグメントで宣言されたexception.startResolutionForResult()
は呼び出されません。
if (exception is ResolvableApiException) {
exception.startResolutionForResult(activity!!, MY_REQUEST_CODE)
}
この場合、exception.startResolutionForResult()
をフラグメントのstartIntentSenderForResult()
に置き換えます。
if (exception is ResolvableApiException) {
startIntentSenderForResult(exception.resolution.intentSender, MY_REQUEST_CODE, null, 0, 0, 0, null)
}
ネストしたフラグメントを使用している場合、これも機能します。
getParentFragment().startActivityForResult(intent, RequestCode);
これに加えて、親アクティビティからsuper.onActivityResult
を呼び出して、フラグメントのonActivityResult
メソッドを埋める必要があります。
フラグメントには以下のコードを使用してください。
@Override
public void onOtherButtonClick(ActionSheet actionSheet, int index) {
if (index == 1)
{
Intent intent = new Intent(Intent.ACTION_PICK,
Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), 1);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 1) {
if (requestCode == 1) {
Uri selectedImageUri = data.getData();
//selectedImagePath = getPath(selectedImageUri);
}
}
}
onActivityResultは、その親を呼び出さずに呼び出します。
最も簡単な方法の1つは、あなたのフラグメントからアクティビティを開始することです。
startActivity(ActivityName);
次に、あなたのアクティビティからstartActivityForResult(intent,"1");
を呼び出し、アクティビティにonActivityResult
を追加します。
startActivityForResult(intent,"1");
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
// perform other activity result like fetching from Uris or handling cursors
finish(); // finish the activity will get to back to your fragment.
}
Kotlinバージョン(アクティビティonActivityResult())
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//add following lines in your activity
if(supportFragmentManager?.fragments!=null && supportFragmentManager?.fragments!!.size>0)
for (i in 0..supportFragmentManager?.fragments!!.size-1) {
val fragment= supportFragmentManager?.fragments!!.get(i)
fragment.onActivityResult(requestCode, resultCode, data)
}
}
ホストアクティビティ 起動モード を
mention
またはsingleInstance
に設定しないようにするためのsingleTask
を持っている人はいません。
起動モードがSingleInstanceまたはSingleTaskに設定されている場合、onActivityResultは機能しません。またはあなたはこれらのIntentFiltersを使ってあなたの活動を呼びます
standard
またはsingleTop
起動モードは問題なく動作します。
フラグメントクラス内にあるメソッドonActivityResult
に問題があり、フラグメントクラス内にあるものも更新したい場合は、次のようにします。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == Activity.RESULT_OK)
{
// If the user had agreed to enabling Bluetooth,
// populate the ListView with all the paired devices.
this.arrayDevice = new ArrayAdapter<String>(this.getContext(), R.layout.device_item);
for(BluetoothDevice bd : this.btService.btAdapater.getBondedDevices())
{
this.arrayDevice.add(bd.getAddress());
this.btDeviceList.setAdapter(this.arrayDevice);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
上記のコードに示すようにthis.variable
を追加するだけです。それ以外の場合、メソッドは親アクティビティ内で呼び出され、変数は現在のインスタンスを更新しません。
また、このコードブロックをMainActivity
に入れ、this
をHomeFragment
クラスに置き換え、変数を静的にしてテストしました。期待通りの結果が得られました。
ですから、フラグメントクラスに独自のonActivityResult
の実装を持たせたい場合は、上記のコード例が答えになります。
私はFragment
を拡張する基本クラスを書くことによって問題を処理しました、そして活動のonactivityresult
で私はfragmenttag
を使って現在走っているフラグメントを識別しました。それから私はfragmentbaseクラスのユーザー定義メソッドを呼び出します。これは現在実行中のフラグメントのイベントを起動します。