アンドロイド:アクティビティの戻り値を取得する
-
19-08-2019 - |
質問
新しい活動の立ち上げについて質問です。要約するとこれです。ビューに 3 つのタブがあります
A) contains gMap activity
B) camera activity
C) some random text fields.
要件は、アプリケーションがポートレート モードで実行されることです。
カメラ プレビュー サーフェス (B) を除き、3 つのタブはすべて期待どおりに機能します。90度回転させた状態です。これを正しくする唯一の方法は、アプリを横向きに設定することですが、これではすべてのタブが表示され、ほとんど機能しません。
私の解決策はこれです:交換する
私のカメラアクティビティと通常のアクティビティは例外ですが空です
Intent i = new Intent(this,CameraActivity.class);
startActivity(i);
これにより、CameraActivity が起動します。そしてそれはうまくいきます。直線的なレイアウトを作成し、実際のタブのように見える 3 つの画像を含める必要がありました。これにより、画面を横向きに回転させながらビジュアルを縦向きに保ちながら、タブの操作を模倣することができます。ユーザーはいずれかの画像 (ボタン) をクリックして次のタブを表示できます。これは私の問題です。「カメラアクティビティ」を終了してタブの「空のアクティビティ」に戻り、画像から目的のタブをクリックすると解釈されるはずです。
主なことは、戻ったときに、タブの下の空白 (黒い) ページに戻ることです (「空」であるため)。アクティビティを呼び出したページに戻りイベントをキャプチャして、アクティビティが実行したアクションを確認するにはどうすればよいですか?
onclicklistener を設定すると、偽のタブ (画像) がクリックされてカメラ アクティビティを終了することに応答できます。終了時にタブが更新され、そこに戻る必要があります。助言がありますか?
ありがとう、
解決
希望どおりに動作するように回避策を解決する方法に答えることに重点を置きます。
あるアクティビティで実行されたアクションを別のアクティビティ内でキャプチャするには、3 つの手順が必要です。
次を使用して、2 番目のアクティビティ (「カメラ アクティビティ」) をサブアクティビティとして起動します。 startActivityForResult
の代わりに startActivity
.
Intent i = new Intent(this,CameraActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
サブアクティビティ (カメラ アクティビティ) 内では、ユーザーが別のタブ画像をクリックしたときにアクティビティを閉じるのではなく、新しいインテントを作成し、エクストラ バンドルを使用して親アプリに戻ったときに表示するタブのインデックスを含める必要があります。 。親呼び出しに戻すには setResult
電話する前に finish
をクリックしてカメラのアクティビティを閉じます。
resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();
最後のステップは呼び出し側のアクティビティで、オーバーライドします。 onActivityResult
カメラアクティビティからのコールバックをリッスンします。返されたインテントから追加情報を取得して、表示するタブのインデックスを決定します。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (STATIC_INTEGER_VALUE) : {
if (resultCode == Activity.RESULT_OK) {
int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
// TODO Switch tabs using the index.
}
break;
}
}
}