2011-02-02 2 views
2

私はアンドロイドのチュートリアルをやっていますが、インテント/アクティビティのやり取りについて何か私を混乱させています。 Javascriptでは、ajax呼び出しがあるたびに、結果をajax呼び出しと一緒に処理する方法を定義し、アプリケーションライフサイクル全体で異なるajax呼び出しに対して異なるコールバックを使用できます。アンドロイドがインテントでアクティビティを開始し、渡されたバック結果を処理することは、少なくともそれがチュートリアルでどのように行われたかであり、結果がどのように処理されるかについての単一のポイントしかないので、フライハンドリングメインエントリーポイントを邪魔することなく結果を表示できます。私は簡単にメインエントリーポイント内のスイッチングを恐ろしい混乱にさせる複雑なロジックを想像することができます。これは基本的なアンドロイドのアーキテクチャーなことですか?あるいは、単一のエントリーポイントでswitch文の代わりに実際のコールバックを使って何かをする別の方法がありますか?アンドロイドインテントとコールバック

+0

'In Javascript'あなたの間違いがあります。これはjavascriptではありません。実際、それはあなたが得ることができるように、おそらくjavascriptから遠く離れています。 – Falmarri

+0

@Falmarri:どうしたの?プログラミングパターンは、さまざまなプログラミング言語でよく見られる抽象概念です。 Javascriptから遠く離れていても、言語がJavascriptで表示されるパターンを持つことを妨げるものではありません。 – davidk01

+0

あなたの間違いは、別のフレームワークと比較して言語/フレームワークを学習していることです。良いアンドロイドコードを書くのではなく、アンドロイドでjavascriptコードを書くことになります。 – Falmarri

答えて

2

あなたが限られていることは事実でありますアクティビティが終了したという応答を受け取るための単一の場所に移動します。それぞれに対してコールバック関数を定義できればうれしいでしょうが、それはどのように動作するのでしょうか。

私の経験では、単一のアクティビティから非常に多くの異なる宛先を管理することはほとんどありません。一般的に、各ページは1つまたは2つの他のページにしかつながりません。

あなたが好きな何かを行うことができますきれいにそれぞれのケースのためにあなたのロジックを分離するために、以下:

void onActivityResult(int requestCode, ....) { 
    switch(requestCode) { 
    case Activity1: 
     onActivity1Result(...); 
     break; 
    case Activity2: 
     onActivity2Result(...); 
     break; 
    } 
} 
+0

@ Davidk01お待ちください、これは答えでしたか?私はその質問を理解してはいけません。 switch文から他のメソッドを呼び出してコードを整理できるかどうかを知りたがっていますか? –

+0

@ニック:これは最も合理的な答えでした。私は、アクティビティ産卵地でコールバックをインテントと結合することを望んでいましたが、これは不可能なようです。コールバックは、特にGUI要素が関わっているときにプログラムするためのより自然な方法だと思います。それを可能にする言語では、呼び出し可能な構造を構築し、適切なタイミングで呼び出すことに慣れています。チャッターから、これはアンドロイドでは不可能であると思われ、私はスイッチステートメントに固執する必要があります。 – davidk01

+0

@ davidk01:結果を期待し始めている活動はいくつですか?それがあなたの問題の本当の根源になるかもしれません。 startActivityForResultで呼び出すアクティビティが1つまたは2つ以上ある場合は、アクティビティをより分かりやすくするためにデザインを再考する必要があります。 – Falmarri

1

インテントとアクティビティは、開発者が再利用可能な疎結合コンポーネントを開発できるように設計されています。

私は、作成している2つのアクティビティの内部で作業するとき、そのメカニズムが不必要に制限されているように見えることを理解しています。制限は、プラットフォームのオープンな性質の一部です。あなたが所有するアクティビティーを開始するために使用するのと同じメカニズムが、別の開発者またはOS自体によって作成されたアクティビティーを開始する可能性があります。

言われているように、アクティビティ間で情報を渡すための選択肢がたくさんあります。それは本当にあなたが達成しようとしているものに依存します。私はちょうどその活動、ユーザーの視点からの活動を考えようとします。

  • Intent.putExtra
  • を:私はあなたがオプションを絞り込む手助けしようとするでしょう、あなたはさらに、アプリケーションや必要性を記述したい場合は、データを渡すためのいくつかのメカニズムを一覧表示し、するつもりですstartActivityForResult(私はあなたがこれを知っていると仮定している)
  • SharedPreferences
  • サービス
  • のContentProvider
+0

私は既にIntent.putExtraの行に沿って考えていましたが、Intent.putExtraでアクティビティ間を行き来するパラメータがたくさんある場合、この種のコードをどのように記述するのかはわかりません。私は、コールバックにロジックをローカライズすることによって、パラメータの爆発を避けることを望んでいました。 – davidk01

+0

@ davidk01インテントエクストラは呼び出し側と呼び出されたアクティビティでアクセスする必要があるため、単一の関数でローカライズすることはできません。最善の策は静的なconstとしてそれらを1つの一貫した場所に宣言することです。私は通常、STRING_EXTRA_FOOやINT_EXTRA_BARのような一貫した命名体系を使って、呼び出されたアクティビティでそれを行い、自己文書化しました。 –

1

はまた、あなたのような独自の画面なしに、バックグラウンド・プロセスのための新たな活動を開始する必要はありませんのでご注意Ajaxコール - 代わりにAsyncTaskを使用すると、javascriptスタイルのコールバックが可能になります。

関連する問題