web-dev-qa-db-ja.com

Android:アクティビティのリターンをキャプチャする

新しいアクティビティの立ち上げに関して質問があります。これに要約します。ビューに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を設定して、クリックされた偽のタブ(画像)に応答してカメラアクティビティを終了できます。終了すると、タブが更新され、そこに戻ります。助言がありますか?

おかげで、

81
Chrispix

回避策を解決する方法に答えて、希望どおりに動作するように焦点を当てます。

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

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; 
    } 
  } 
} 
158
Reto Meier