2017-01-25 18 views
-2

私は不精な質問をしているかもしれませんが、私はアンドロイドには新しいので、この問題の解決策を見つけることができません。同じ名前のレイアウトを持つ2人のメンバーを持つR.java

setContentView(R.layout.activity_main)がどのように動作するかを知るために、私のコンピュータにR.javaというファイルを開いたとき。

は、だから、私はR.javaファイルを開いて、単にので、私は私のR.javaファイルにそのための2つのエントリので、私はどのようにコンパイラができることを混乱していますが、私は現在の基準にしようとしていたlayoutメンバーのことを認識したキーレイアウトを検索しました。 layoutのメンバーが宣言されている行を含むR.javaファイルのスニペットを入れています。

/* AUTO-GENERATED FILE. DO NOT MODIFY. 
* 
* This class was automatically generated by the 
* aapt tool from the resource data it found. It 
* should not be modified by hand. 
*/ 

package com.myapp; 

public final class R { 
    public static final int layout=0x7f0100a9; 
     /** <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" 
or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". 
     */ 

    public static final class layout { 
     public static final int abc_action_bar_title_item=0x7f040000; 
     public static final int abc_action_bar_up_container=0x7f040001; 
     public static final int abc_action_bar_view_list_nav_layout=0x7f040002; 
     public static final int abc_action_menu_item_layout=0x7f040003; 
     public static final int abc_action_menu_layout=0x7f040004; 
     public static final int abc_action_mode_bar=0x7f040005; 
     public static final int abc_action_mode_close_item_material=0x7f040006; 
     public static final int abc_activity_chooser_view=0x7f040007; 
     public static final int abc_activity_chooser_view_list_item=0x7f040008; 
     public static final int abc_alert_dialog_button_bar_material=0x7f040009; 
     public static final int abc_alert_dialog_material=0x7f04000a; 
     public static final int abc_dialog_title_material=0x7f04000b; 
     public static final int abc_expanded_menu_layout=0x7f04000c; 
     public static final int abc_list_menu_item_checkbox=0x7f04000d; 
     public static final int abc_list_menu_item_icon=0x7f04000e; 
     public static final int abc_list_menu_item_layout=0x7f04000f; 
     public static final int abc_list_menu_item_radio=0x7f040010; 
     public static final int abc_popup_menu_item_layout=0x7f040011; 
     public static final int abc_screen_content_include=0x7f040012; 
     public static final int abc_screen_simple=0x7f040013; 
     public static final int abc_screen_simple_overlay_action_mode=0x7f040014; 
     public static final int abc_screen_toolbar=0x7f040015; 
     public static final int abc_search_dropdown_item_icons_2line=0x7f040016; 
     public static final int abc_search_view=0x7f040017; 
     public static final int abc_select_dialog_material=0x7f040018; 
     public static final int activity_main=0x7f040019; 
     public static final int notification_media_action=0x7f04001a; 
     public static final int notification_media_cancel_action=0x7f04001b; 
     public static final int notification_template_big_media=0x7f04001c; 
     public static final int notification_template_big_media_narrow=0x7f04001d; 
     public static final int notification_template_lines=0x7f04001e; 
     public static final int notification_template_media=0x7f04001f; 
     public static final int notification_template_part_chronometer=0x7f040020; 
     public static final int notification_template_part_time=0x7f040021; 
     public static final int select_dialog_item_material=0x7f040022; 
     public static final int select_dialog_multichoice_material=0x7f040023; 
     public static final int select_dialog_singlechoice_material=0x7f040024; 
     public static final int support_simple_spinner_dropdown_item=0x7f040025; 
    } 
} 

私は、同じ名前layoutで利用可能なint変数と内部クラスがあるのでsetContentView(R.layout.acivity_main)を書きながら、どのようにコンパイラが実際layout要素を解決できることを知りたいです。

+1

ありませんただ-1の質問。私はこれに新しいので、私は理解できない非常に単純なことかもしれませんが、質問に答えてください。 –

答えて

2

1つはclassであり、もう1つはintです。コンテキストからの曖昧さはありません。

両方の解釈が可能な場合、それは変数(ないタイプ)を使用して解決します。

public class Test { 
    public static void main(String... args) { 
     { 
      Value x = new Value(); 
      // use the variable x 
      System.out.println(x.i); 
      // System.out.println(x.j); // does not compile 
     } 
     // use the type x 
     System.out.println(x.i); 
    } 
} 

class x { 
    static int i = 42; 
    static int j = 1; 
} 
class Value { 
    int i = 100; 
} 

出力は次のとおりです。

100 
42 

EDIT:これは何が起こるかではありませんあなたの質問で。

あなたは正しい、あいまいさがあるでしょう:生成R.javaで、int layoutがinnerclassであるため、

public class Test { 
    public static void main(String... args) { 
     // does not compile 
     System.out.println(R.layout.x); 
    } 
} 

class R { 
    static final class layout { 
     static int x = 42; 
    }; 
    static final int layout = 25; 
} 

実際には、何もありません:

public final class R { 
    public static final class attr { 
     public static final int layout = …; 
    } 
    public static final class layout { 
     //… 
    } 
} 
+0

レスポンスはありがたいですが、 'R.layout'と書くと、どちらも同じクラスに入っているか、レイトバインディングやオーバーライドに似たコンセプトですか? –

+0

でもクラスはRクラスの内部に書かれているので、クラスRに2人のメンバーが含まれているようなものです1)intメンバ 'layout'、2)内部クラス' layout'これら両方の場合、コンテキストは 'R ' –

+0

' class X'が 'class X'の内部に' int i'と 'class i'を内部クラスとして持つ場合はどうなりますか?それではどうなるの? –

関連する問題