2012-07-02 48 views
1

我試圖找到這個問題的答案,並且我認爲我的代碼會按照我想要的方式工作,但是......事實並非如此。在多個充氣佈局中獲取相同視圖的參考

問題:我有一個「Parent」LinearLayout,我添加了幾個嵌套的膨脹的「Child」LinearLayout。這工作。 每個CHILD佈局都有兩個視圖,一個是自定義的ChipView和一個TextView。在我爲每個孩子充氣後,我希望能夠在我的活動期間「每當我想要」修改每個孩子的ChipView和TextView。

我創建了一個簡單的項目來玩,但我只能設法訪問FIRST INFLATED子佈局的ChipView和TextView。所有後續的都被正確地插入Parent中,但顯然我無法得到一個變量來引用它們。

我之前通過在運行時創建ChipView來完成此任務,並且工作完美無瑕,但我想要一個更加優雅的方法,使用可以單獨控制的XML。

在我的活動中,我有一個創建子項的按鈕和一個應該在當前ChipView中調用方法的按鈕(即最後一個充氣或我點擊的方法)。

活動:

public class SandboxActivity extends Activity { 
    private Button okbtn; 
    private Button add; 
    private EditText count; 
    private ChipsView chips; 
    private LinearLayout pots; 
    private TextView amount; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test); 

     okbtn = (Button) findViewById(R.id.ok); //calls the method in customviews 
     add = (Button) findViewById(R.id.add); //adds a child 
     count = (EditText) findViewById(R.id.count); //the value to call methods with 
     pots = (LinearLayout) findViewById(R.id.pots); //the PARENT layout 

     add.setOnClickListener(new Button.OnClickListener() { 

     public void onClick(View v) { 
      LinearLayout ll = (LinearLayout) getLayoutInflater().inflate(R.layout.pottemplate, pots); 
      chips = (ChipsView) ll.findViewById(R.id.chips); 
      amount = (TextView) ll.findViewById(R.id.amount); 

       //this should allow me to set the activity.chips variable to the last clicked custom view 
      chips.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        chips = (ChipsView) v; 
       } 
      });   
      } 

     }); 


     okbtn.setOnClickListener(new Button.OnClickListener() { 

      public void onClick(View v) { 
       chips.setCount(Double.parseDouble(count.getText().toString()));   
      } 

     }); 

    } 
} 

充氣XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <com.ded.sandbox.ChipsView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="100dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="2" 
     android:id="@+id/chips">  

    </com.ded.sandbox.ChipsView> 

    <TextView 
     android:id="@+id/amount" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:text="TextView" android:gravity="center_horizontal" android:textSize="12dp" android:textStyle="bold"/> 

</LinearLayout> 
+0

要更清楚了,我認爲問題在於,無論變量芯片和金額總是指向FIRST CHILD佈局中的視圖,即使每次充氣後都調用ll.findViewById()。 – RunawayMartian

+0

我想通了。而不是 LinearLayout ll =(LinearLayout)getLayoutInflater()。inflate(R.layout.pottemplate,pots); 我打電話給我: LinearLayout ll =(LinearLayout)getLayoutInflater()。inflate(R.layout.pottemplate,null); 及更高版本 pots.addView(ll); – RunawayMartian

回答

1
View oneHappyRow = mInflater.inflate(R.layout.one_happy_hour_row,null); 
TextView dayOfWeekTextView = (TextView) oneHappyRow.findViewById(R.id.dayOfWeekTextView); 
TextView hoursOfDayTextView = (TextView) oneHappyRow.findViewById(R.id.hoursOfDayTextView); 

得到的引用在這裏每個充氣佈局,設置文本等等,那麼:

this.addView(oneHappyRow); 

中的類我的例子擴展了LinearLayout。

每個參考現在都在工作,並且您不會始終獲得最後的參考。

相關問題