2012-06-29 35 views
3

我有一個佈局,我必須包括幾次。它由一個TextView和一個ImageViewAndroid - 同一個不同的ID包括佈局

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="40dp" 
    android:background="@drawable/back2" 
    android:id="@+id/id_1"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/id_2" 
    android:textSize="15dp" 
    android:typeface="sans" 
    android:textColor="#ffffff" /> 

現在我想以編程方式設置文本,但我面臨的問題是,該TextView現在總是具有相同的ID,因爲我包括相同的佈局幾次。有沒有辦法以編程方式包含佈局,並始終更改每個包含的佈局的ID?

+0

你爲什麼沒有動態地添加TextView的? –

回答

4

我會做的是,當你需要訪問所包含的佈局的特定實例的觀點:

ViewGroup instance = (ViewGroup) findViewById(R.id.included1); // Replace ViewGroup with whatever your particlar type is 
ImageView iView = (ImageView) instance.findViewById(R.id.id_1); 
TextView tView = (TextView) instance.findViewById(R.id.id_2); 
+0

這就是我通常用包含的佈局來做的。我有幾個不同的通用按鈕設置(兩個垂直,兩個水平等),我反覆使用,並根據它們包含的佈局來引用它們以設置不同的文本和動作。 – Barak

0

據我所知,沒有辦法做到這一點。如果您希望XML佈局中的ID是唯一的,則必須使用<include>創建不帶佈局的佈局。

2

您可以動態創建您的TextView,然後使用TextView.setId(int id)來設置該視圖的ID,以便以後可以使用新ID調用它。

1

對於每個TextView的

更改ID在該行android:id="@+id/id_2"到不同的ID。

例如:

android:id="@+id/id_4"

要添加這些程序,你可以這樣做:

  TextView Label3 = new TextView(this); 
      Label3.setId(300); 
      Label3.setTextAppearance(this, android.R.attr.textAppearanceMedium); 
      Label3.setLayoutParams(labelParams); 
      Label3.setText("My textViewCaption:"); 
      ll3.addView(Label3); 

如果設置LABEL3作爲一個全局變量,你可以訪問它去改變它,通過setText

以編程方式,您可以循環訪問並在循環中設置ID

1

您可以用它來改變你的TextView ID
TextView textview = new TextView(this); textview.setId(int id);