82

新しい活動の立ち上げについて質問があります。これに尽きます。ビューに 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 を設定できます。終了時にタブが更新され、そこに戻る必要があります。助言がありますか?

ありがとう、

4

1 に答える 1

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してカメラ アクティビティからのコールバックをリッスンします。返された Intent からエクストラを取得して、表示する必要があるタブのインデックスを決定します。

@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; 
    } 
  } 
} 
于 2009-01-16T08:20:47.997 に答える