2014-02-18 46 views
-1

我正在編程地將視圖添加到for循環中的佈局中。ImageView在設置ID後消失

我加入佈局的XML文件是這樣的一個:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout_consulta_item_list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <ImageView 
     android:id="@+id/imageView_consulta_action" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/LinearLayout_dados_consulta" 
     android:layout_alignParentRight="true" 
     android:layout_alignTop="@+id/LinearLayout_dados_consulta" 
     android:layout_centerHorizontal="true" 
     android:layout_centerInParent="false" 
     android:adjustViewBounds="true" 
     android:maxWidth="70dp" 
     android:padding="10dp" 
     android:scaleType="centerInside" 
     android:src="@drawable/estrela_off" /> 
    <LinearLayout 
     android:id="@+id/LinearLayout_dados_consulta" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="2dp" 
     android:layout_toLeftOf="@+id/imageView_consulta_action" 
     android:background="#660000" 
     android:orientation="vertical" > 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:gravity="center" > 
      <TextView 
       android:id="@+id/textView1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="top" 
       android:layout_marginLeft="5dp" 
       android:layout_marginRight="5dp" 
       android:text="@string/origem" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:textColor="#ffaaaa" 
       android:textSize="10sp" /> 
      <TextView 
       android:id="@+id/textView_origem" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="YYY" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="#eeeeee" /> 
      <TextView 
       android:id="@+id/textView5" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="top" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="5dp" 
       android:text="@string/data_ida" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:textColor="#ffaaaa" 
       android:textSize="10sp" /> 
      <TextView 
       android:id="@+id/textView_data_ida" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="2014-05-05" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="#eeeeee" 
       android:textSize="15sp" /> 
     </LinearLayout> 
    </LinearLayout> 
</RelativeLayout> 

在我main_activity,我調用構造函數:

for (int i=0;i<resultList.length-1;i++){ 

    RelativeLayout viewToLoad = (RelativeLayout)LayoutInflater.from(this).inflate(R.layout.consulta_item, null); 
       ll.addView(viewToLoad); 

    ImageView ImgConsulta_action = (ImageView)findViewById(R.id.imageView_consulta_action); 

    LinearLayout dados_consulta = (LinearLayout)findViewById(R.id.LinearLayout_dados_consulta); 


    dados_consulta.setOnLongClickListener(...); 
    ImgConsulta_action.setOnLongClickListener(...); 

嗯,我一直對所有設置的setText佈局中的意見等等。

但是,爲了使setOnClickListener爲每個視圖中工作,我必須一個ID設置爲內部的for循環的觀點:

dados_consulta.setId(4000+i); 
ImgConsulta_action.setId(5000+i); //(*lastline) 

怪異的事情發生的事情是:

如果我對最後一行進行註釋,那麼佈局會正確插入,並且圖像視圖會顯示一顆星星,因爲它與「dados_consulta」中的偵聽器工作正常。

但是,如果我刪除最後一行的註釋,則該星從屏幕消失。

任何人都可以幫助我理解發生了什麼嗎?

+0

你的代碼中有沒有其他地方使用這一行:'ImageView ImgConsulta_action =(ImageView)findViewById(R.id.imageView_consulta_action);'? – Merlevede

+0

請發送代碼部分與導致問題的代碼段。 –

+0

@Merlevede不,這是唯一的地方。我要求ImgConsulta_action的其他行是設置標記,onClickListener,setImageResource和setId。順便說一句,是代碼的和平導致問題 – Totalys

回答

0

我有一個佈局參數引用到原始視圖的佈局元素的ID。 由於我在我的活動中多次添加此佈局時需要動態更改ID,因此我還需要將佈局窗格重置爲新的ID。 所以,我說這行:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)ImgConsulta_action.getLayoutParams(); 
params.addRule(RelativeLayout.ALIGN_TOP, dados_consulta.getId()); 
params.addRule(RelativeLayout.ALIGN_BOTTOM, dados_consulta.getId()); 

ImgConsulta_action.setLayoutParams(params); 

RelativeLayout.LayoutParams paramsDadosConsulta = (RelativeLayout.LayoutParams)dados_consulta.getLayoutParams(); 
paramsDadosConsulta.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
paramsDadosConsulta.addRule(RelativeLayout.LEFT_OF, ImgConsulta_action.getId()); 

dados_consulta.setLayoutParams(paramsDadosConsulta); 

現在,它的工作完美。

請注意,問題不在於佈局消失,而是佈局在另一個之前。 (使這個另一個不可見)