[解決済み】TabHostアクティビティから結果(startActivityForResult)を返すには?
2022-04-01 21:05:52
質問
私の例では、3つのクラスがあります。 クラスAは、メインのアクティビティです。 クラスAは、startActivityForResultを呼び出します。
Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");
クラスB、このクラスはTabActivityです。
Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...
クラスC、このクラスは通常のActivityです。
Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();
onActivityResultがクラスAで呼び出されますが、resultCodeが
RESULT_CANCELED
ではなく
RESULT_OK
となり、返されたインテントがnullになります。 TabHost内のActivityから何かを返すにはどうしたらよいでしょうか?
問題は、私のクラスCが実際にはクラスBの内部で実行されていることであり、クラスBが
RESULT_CANCELED
ただ、回避策がまだわかりません。
解決方法は?
ああ、もう! 数時間かけてAndroidのソースをダウンロードし、ようやく解決にたどり着きました。
Activityクラスを見てみると、以下のようになります。
finish()
メソッドが結果を送り返すのは、もし
mParent
プロパティに設定されている
null
. そうでない場合は、結果が失われます。
public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
そこで、私の解決策は、親アクティビティが存在する場合は、そのアクティビティに結果を設定することです。
Intent data = new Intent();
[...]
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
}
finish();
この問題のワークアラウンドを再び探す人がいれば、参考になるかと思います。
関連
-
[解決済み] カスタムアダプタからnotifyDataSetChangeが機能しない
-
[解決済み】Bluestackの向きを変更する : ポートレート/ランドスケープモード
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] 現在のアクティビティからルートビューを取得する
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] AndroidでstartActivityForResultを管理する方法
-
[解決済み] Intentsを使用して、あるAndroid Activityから別のAndroid Activityにオブジェクトを送信するにはどうすればよいですか?
-
[解決済み】Androidで透明なActivityを作成する方法は?
-
[解決済み】Androidで、あるアクティビティから別のアクティビティにオブジェクトを渡す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】OnFragmentInteractionListenerを実装する方法
-
[解決済み】com.android.ide.common.process.ProcessException: aaptの実行に失敗しました! どうすればいいですか?
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み】Dalvikとdalvik-cacheとは何ですか?
-
[解決済み】プロガードを有効にすると、タスク ':app:crashlyticsStoreDeobsDebug' の依存関係を判断できない。
-
[解決済み】Android Studio 3.2 - com.android.tools.build:aapt2:3.2.0-4818971 を見つけられませんでした。
-
[解決済み] Android Studioで「URIが登録されていません」と報告されるのはなぜですか?[クローズド]
-
[解決済み] コンパイルした.apkを端末にインストールしようとするとINSTALL_FAILED_UPDATE_INCOMPATIBLEが表示される
-
[解決済み] android.support.design.widget.FloatingActionButton クラスの展開に失敗しました。
-
[解決済み] AndroidでstartActivityForResultを管理する方法