38

androidでは、R.javaは、XMLファイルで定義されたリソースへのアクセスを提供するために使用されます。findViewById()リソースにアクセスするには、フェッチするリソースのIDを渡すメソッドを呼び出す必要があります。

これは、BeanがXMLコンテキストで定義され、アプリケーションコンテキストを使用してフェッチされるSpringに似ています。context.getBean("beanId")

Beanは外部で定義され、コードを変更せずに変更できるため、これにより緩い結合が提供されます。

これは私を混乱させました。Androidは春に似ていますが、どのような利点がありますか?

  1. とにかく中間のR.javaを持つことのポイントは何ですか?リソースリーダー/アプリケーションコンテキストを使用して、XMLから直接リソースを取得することはできませんでした。例えばfindViewById("resourceId")
  2. 緩い結合はありません。R.javaの参照は自動生成されるので、リソースを削除して新しいリソースを追加するにはどうすればよいでしょうか。
  3. それはどのようなデザインパターンに従いますか(ある場合)?
  4. IOC(Roboguiceなど)を使用してリソースを注入する方がよいのではないでしょうか。なぜグーグルは私たちにリソースを扱うそのような奇妙な方法を与えることに決めたのですか?

私の無知を許してください。私は初心者のJava開発者で、一度に多くのことを試しています。:-)すべてのフィードバックに感謝します。

4

4 に答える 4

21

最大の利点は、ローカリゼーションとさまざまな画面サイズの代替リソースの提供にあります。

たとえば、文字列リソースを持つことがR.string.mynameできます。これは、英語/values-en/strings.xmlとスペイン語で定義できます。/values-es/strings.xml

@string/mynameレイアウトファイルまたはコードで使用する必要があるロケールに応じて、システムが適切なファイルを処理または取得R.string.mynameします。

同様に、縦向きと横向きの2つのレイアウトファイルをで定義することができます。

res/layout/mylayout.xml
res/layout-land/mylayout.xml

コードでは、R.layout.mylayoutを指定するだけで、レイアウトを膨らませることができます。デバイスがランドスケープモードの場合、リソースマネージャーはレイアウトランドでファイルを取得します。

これを手動で行うのは悪夢です-したがって、Rファイルが必要です

于 2012-04-04T04:50:00.377 に答える
20

android.R.javaは、 XMLIDが保存される場所だけではありません。また、ドローアブル、レイアウト、文字列、配列、および基本的にリソースで宣言できるすべてのものなどのリソースへのアクセスも含まれています。

個人的には、Eclipseを使用するときに便利だと思います。入力するだけfindViewById(R.id.で、Eclipseにオプションのリストを含むツールチップが表示されます。

ただし、プラットフォームレベルでは、ハードコードされたid変数は、文字列を使用してリソースを識別するときにエラーを防ぐのに役立ちます。これは、プログラミング中(または実行時ではなくコンパイル中)にデバッグ可能です。

于 2012-04-04T04:38:35.287 に答える
1

名前付きのものを使用して何かを行うという事実に基づいて2つのメカニズムを比較するため、比較は少し(実際には)奇妙 感じます。たとえば、リソースの読み込みについては、世界でリソース処理がどのように行われているのかを見てください。.Net


リソースが使用可能かどうかをコンパイル時にチェックします。そうでない場合は、それR.javaを指す内部に静的なものがないためです。春の例では、どのようにしてBeanと呼ばれるBeanがあることを確認できますbeanIdか?ただし、それが適切なタイプのリソースであるかどうかを確認することはできません。

なぜこれが緩んでいないのですか?新しいリソースが同じ名前である限り、同じ静的定数が生成されます。春には、同じBean名を使用する必要があります。

デザインパターン?なし。リソースに名前を付けて1レベルの間接参照を追加し、実際の場所から直接ロードするのではなく、名前だけでリソースを参照します。

実際には、リソースのロードはローカリゼーションに対応する必要があるため、リソースが注入されます。Androidの機能については、こちらをご覧ください。世界では.Net、追加の文化がサテライトアセンブリに詰め込まれています。リソースマネージャーは、現在のカルチャに基づいて適切なものをロードします。

于 2012-04-04T04:48:01.810 に答える
0

また、ID、ドローアブル、レイアウト、文字列、配列、および基本的にリソースで宣言できるすべてのものなどのリソースへのアクセスも含まれています。

于 2017-03-30T10:24:37.313 に答える