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


82

新しい活動の立ち上げについて質問があります。要約すると、これです。ビューに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つの画像を含める必要があったため、画面を横向きに回転させながらタブの操作を模倣し、ビジュアルを縦向きに保つことができます。ユーザーは画像(ボタン)の1つをクリックして、次のタブを表示できます。これが私の問題です。「カメラアクティビティ」を終了して、タブの「空白のアクティビティ」に戻ります。ここで、画像から目的のタブをクリックすると解釈されます。

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

クリックされた偽のタブ(画像)に応答してカメラアクティビティを終了できるonclicklistenerを設定できます。終了すると、タブが更新され、そこに戻ります。助言がありますか?

ありがとう、

回答:


159

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

あるアクティビティで実行されたアクションを別のアクティビティ内でキャプチャするには、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; 
    } 
  } 
} 

3
なぜrequestCodeをオンにしてから、requestCode == RESULT_OKかどうかを確認するのですか?編集:気にしないでください、requestCode / resultCodeの違いがわかります。
varikin 2010

1
2番目のアクティビティAsynkTaskとしてを使用してこれを行うことはできますか?
フランシスココラレスモラレス2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.