2013-11-24 54 views
0

我有兩個版式一爲我的主要活動,第二次對我的自定義對話框,如下所示:Android的 - 參考layotu找到的元素,但將無法獲取元素

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#FFFFFF" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.51" 
     android:orientation="horizontal"> 

     <ImageView 
     android:id="@+id/logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginTop="10dp" 
     android:src="@drawable/a1" /> 

     <TextView 
     android:id="@+id/owner" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:layout_marginTop="20dp" 
     android:text="Medium Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#000000" /> 

    </LinearLayout> 

</LinearLayout> 

現在在我的主要活動我有onCreate方法:

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 

    if(...) 
    { 
     ... 
     if(...) 
     { 
     // Load the map 
     setContentView(R.layout.activity_map); 

     // Fetch dropdown list & gps button 
     spinner = (Spinner) findViewById(R.id.bankslist); 
     gps  = (Button) findViewById(R.id.gpsbttn); 

     // When this runs both spinner & gps != null 

     // Now I register a listner for my GoogleMap object 
     map.setMapMarkerOnClickListener(new ShowDetails(this)); 

     } else { 
     ... 
     } 

    } else { 
     ... 
    } 
    } 

在我的主要活動我有延伸OnMapMarkerClickListener一個內部類:

class ShowDetails implements OnMarkerClickListener 
    { 
    private FragmentActivity context; 
    public ShowDetails(FragmentActivity context) 
    { 
     this.context = context; 
    } 
    public boolean onMarkerClick(Marker marker) 
    { 
     // Check if selected marker is mapped to a Atm 
     if(markers.containsKey(marker)) 
     { 
     // Fetch ATM associated with marker 
     Atm atm = markers.get(marker); 

     // Create a new Dialog instance to display ATM 
     // associated data 
     Dialog msg = new Dialog(context); 

     msg.setContentView(R.layout.info_dialog); 
     msg.setTitle(atm.getOwner()); 

     ImageView logo = (ImageView) context.findViewById(R.id.logo); 
     TextView owner = (TextView) context.findViewById(R.id.owner); 

     if(logo == null) 
     { 
      Log.w("ILG", "LOGO IS NULL"); 
     } 

     } 
     return true; 
    } 
    } 

在這個內部類中,我試圖獲取對info_dialog.xml佈局文件中包含的徽標和屬性屬性的引用,即使這兩者都在R中,我總是gett徽標/所有者== null。 findViewById(..)永遠不會返回有效的對象。

回答

0

由於這些View s爲內部info_dialog.xml這沒有用setContentView()膨脹,你需要的是膨脹和layout用它來獲取到View個參考。

LayoutInflater inflater = context.getSystemService.(Context.LAYOUT_INFLATER_SERVICE);  
View root= inflater.inflate(R.layout.info_dialog, null); 
msg.setContentView(root); // can use it here 
msg.setTitle(atm.getOwner()); 

ImageView logo = (ImageView) root.findViewById(R.id.logo); // change 
TextView owner = (TextView) root.findViewById(R.id.owner); // these lines 
+0

在膨脹方法什麼是父母? –

+0

我用.inflate(R.layout.info_dialog,null);取而代之的是,logo仍然是空的。 –

+0

您使用過'root.findViewById()'嗎? – codeMagic