2013-08-06 75 views
-1

在我的主佈局(在創建時設置)我有一些包含的佈局,其中有imageview在其中。在我的代碼中,我需要爲這些imageView設置位圖。我的方法是這樣的:findViewById返回null現有的包含佈局

(ImageView) ((findViewById(R.id.first_app + (i - 1)).findViewById(R.id.app_image))); 

我是循環變量。 問題是我得到空的findViewById(R.id.first_app +(I - 1),但這些佈局在主要佈局存在

請幫我找到這個錯誤的原因,我真的很困惑,我。 「M接近最後期限 這裏是我的主要佈局的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="3" 
    tools:context=".MoreAppsActivity" > 

    <RelativeLayout 
     android:id="@+id/more_app_title" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:gravity="center" 
     android:background="#EA7026"> 

     <ImageView 
      android:id="@+id/more_app_title_img" 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:background="@android:color/transparent" 
      android:src="@drawable/more_app_title_image"/> 
    </RelativeLayout> 

    <include 
     android:id="@+id/first_app" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     layout="@layout/single_app_layout" /> 

    <include 
     android:id="@+id/second_app" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     layout="@layout/single_app_layout" /> 

    <include 
     android:id="@+id/third_app" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     layout="@layout/single_app_layout" /> 

    <RelativeLayout 
     android:id="@+id/more_app_subtitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="60dp" 
     android:gravity="center" 
     android:background="#DBBE00"> 

     <ImageButton 
      android:id="@+id/more_app_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@android:color/transparent" 
      android:src="@drawable/more_app_threecircle"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@android:color/black" 
      android:layout_below="@id/more_app_button" 
      android:layout_marginTop="5dp" 
      android:text="?????? ??? ?????"/> 
    </RelativeLayout> 

</LinearLayout> 

,其中包括佈局:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    > 

    <ImageView 
     android:id="@+id/app_image" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="fitXY"/> 

    <LinearLayout 
     android:id="@+id/app_text_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:gravity="center_horizontal" 
     android:weightSum="100"> 

     <TextView 
      android:id="@+id/app_text" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="30" 
      android:background="#88000000" 
      android:text="aligholi salavat" 
      android:textSize="22sp" 
      android:gravity="center" 
      android:textColor="@android:color/white"/> 
    </LinearLayout> 

</FrameLayout> 
+1

也許我不知道,你知道的東西,但什麼是你想用findViewById(R.id.xyz +(I-1)),怎麼辦? – jpm

+0

R.id是一個整數。由於我包含的佈局是順序的,他們的ID是連續的兩個。 (不同之處在於一個)。我在循環中使用它來防止代碼冗餘。 –

+2

@alireza:R.id可能會解析爲整數,但是'R.id.first_app'(例如)實際上只是'R.java'類文件中'static final'字段的名稱。你不能把它當作字符串來處理,只需追加數字即可。 – Squonk

回答

1

問題是

findViewById(R.id.first_app + (i - 1)) 

基本上,R.id.first_app是對R文件中int的引用,您不能將數字附加到它,因爲它最終將等於對其他內容的引用。編譯時,他們每次都會改變順序或價值。

編輯:你可以創建一個R.id.first_app,R.id.second_app和R.id.third_app的int數組。這樣,指向佈局的指針保持不變。

int[] layouts = {R.id.first_app, R.id.second_app, R.id.third_app}; 

然後在循環

findViewById(layouts[i]) 
+0

你是對的,但既然它不能解決我的問題,我不能將它標記爲答案。 –

+0

我編輯了我的答案,提出了一個替代解決方案 – jimmithy

+0

我對我的代碼進行了處理,發現在查找文本視圖時沒有錯誤,並且只有ImageView發生錯誤!你有什麼想法是什麼問題? –