1. ホーム
  2. android

[解決済み] アンドロイド アクティビティーのリターンをキャプチャする

2023-07-09 14:04:53

質問

新しい活動の立ち上げについて質問です。それは、以下のことに集約されます。 私はビューに3つのタブを持ちます

A) contains gMap activity
 B) camera activity
 C) some random text fields.

要件は、アプリケーションがポートレートモードで動作することです。

3 つのタブはすべて期待どおりに動作しますが、カメラ プレビュー サーフェス (B) は例外です。これは 90 度回転しています。これを正しくする唯一の方法は、アプリを横向きに設定することですが、これではすべてのタブが回転してしまい、ほとんど機能しません。

私の解決策は次のとおりです: 置換

を除いて空の通常のアクティビティで置き換えます。

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

これで私のCameraActivityが起動します。そして、これはうまく動作します。私は線形レイアウトを行う必要があり、本物のタブのような 3 つの画像を含める必要がありました。したがって、画面を横向きに回転させながらタブの操作を模倣し、ビジュアルを縦向きのままにしておくことができます。 ユーザーは画像(ボタン)の1つをクリックして、次のタブを表示することができます。これは私の問題です。私の「カメラアクティビティ」を終了して、タブの「ブランクアクティビティ」に戻り、そこで私の画像から目的のタブをクリックするように解釈される必要があります。

主なものは、それが戻るとき、タブの下の空白の(黒い)ページに戻ることです(それは「空」であるため)。アクティビティを呼び出したページに戻る戻りイベントをキャプチャし、彼らが実行したアクションを確認するにはどうすればよいですか?

私は、カメラ活動を終了するためにクリックされた偽のタブ(画像)に応答することができるonclicklistenerを設定することができます。終了時に、タブは、あなたが戻る場所であるように更新する必要があります。何か提案はありますか?

ありがとうございます。

どのように解決するのですか?

あなたのワークラウンドが思い通りに動作するように解決する方法に焦点をあててお答えします。

あるアクティビティで実行されたアクションを別のアクティビティでキャプチャするには、3つのステップが必要です。

サブアクティビティとしてセカンダリアクティビティ(「カメラアクティビティ」)を起動します。 startActivityForResult の代わりに startActivity .

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

サブアクティビティ(カメラアクティビティ)内では、ユーザーが異なるタブ画像をクリックしたときに Activity を閉じるのではなく、新しい Intent を作成し、extras bundle を使用して親アプリに戻ったときに表示するタブのインデックスを含める必要があります。これを親に渡すには setResult を呼び出す前に finish を呼び出してカメラActivityを終了させます。

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

最後のステップは、呼び出し側のActivityで、オーバーライドする onActivityResult をオーバーライドして、カメラActivityからのコールバックを待ち受けます。返されたIntentからextraを取得し、表示するタブのインデックスを決定します。

@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; 
    } 
  } 
}