web-dev-qa-db-ja.com

R.javaの背後にある概念は何ですか?

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

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

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

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

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

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

38
Monika Michael

Android.R.Java[〜#〜] xml [〜#〜] IDが格納される場所だけではありません。また、ドローアブル、レイアウト、文字列、配列、および基本的にリソースで宣言できるものなどのリソースへのアクセスも含まれています。

個人的には、Eclipseを使用するときに便利だと思います。 findViewById(R.id.とEclipseは、選択可能なオプションのリストを含むツールチップを表示します。

ただし、プラットフォームレベルでは、ハードコードされたid変数は、文字列を使用してリソースを特定するときのエラーを防ぐのに役立つと言えます。

20
Phil

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

たとえば、文字列リソース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を指定してレイアウトを拡張します。デバイスが横向きモードの場合、Resource Managerはlayout-landでファイルを取得します。

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

21
Rajdeep Dua

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


compile-timeリソースが利用可能かどうかのチェックを提供します。そうでない場合は、それを指すR.Java内にstaticがないためです。 Springの例では、beanIdというBeanがあることをどのように確認できますか?ただし、リソースの正しいtypeであるかどうかのチェックは提供されません。

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

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

実際、リソースのローディングはローカリゼーションに対応する必要があるため、リソースareが注入されます。 Androidがどのように機能するかについては こちら を参照してください。 .Netの世界では、衛星文化の集合体に追加の文化が詰め込まれています。 resource manager は、現在のカルチャに基づいて適切なものをロードします。

1
Stefan Hanke

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

0
mass