這是我第一次使用 android 編程,我被卡住了?,F在我正在嘗試動態添加包含切換按鈕和編輯文本的視圖。但是,每當我選擇切換按鈕時,我創建的選項僅適用于上次創建的視圖。選項很簡單。有兩個切換按鈕,它們可以互斥例子這意味著每當我在上面添加新視圖(例如 B 和 C)時,選項僅適用于 C 而不適用于 B。我怎樣才能讓它適用于每個視圖?public void onAddField(View v){? ? LayoutInflater inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);? ? final View rowView=inflater.inflate(R.layout.data_gledger_add_new,null);? ? tbg_add=(ToggleButton)rowView.findViewById(R.id.add_toggle_gledger);? ? tbc_add=(ToggleButton)rowView.findViewById(R.id.add_toggle_credit);? ? if(create_box<4){? ? ? ? csl.addView(rowView,csl.getChildCount()-1);? ? ? ? Log.d("create_box",String.valueOf(create_box));? ? ? ? create_box++;? ? }? ? else{? ? ? ? Log.d("create_box","full");? ? ? ? create_box=4;? ? }? ? tbg_add.setOnClickListener(new View.OnClickListener(){? ? ? ? public void onClick(View v){? ? ? ? ? ? if(tbg_add.isChecked()){? ? ? ? ? ? ? ? get_add_cla="menu1";? ? ? ? ? ? ? ? tbg_add.setTextColor(getResources().getColor(R.color.color_white));? ? ? ? ? ? ? ? tbc_add.setChecked(false);? ? ? ? ? ? ? ? tbc_add.setTextColor(getResources().getColor(R.color.color_black));? ? ? ? ? ? }? ? ? ? ? ? else{? ? ? ? ? ? ? ? get_add_cla="";? ? ? ? ? ? ? ? tbg_add.setTextColor(getResources().getColor(R.color.color_black));? ? ? ? ? ? }? ? ? ? }? ? });? ? //?? ??? ? tbc_add.setOnClickListener(new View.OnClickListener(){? ? ? ? public void onClick(View v){? ? ? ? ? ? if(tbc_add.isChecked()){? ? ? ? ? ? ? ? get_add_cla="menu2";? ? ? ? ? ? ? ? tbc_add.setTextColor(getResources().getColor(R.color.color_white));? ? ? ? ? ? ? ? tbg_add.setChecked(false);? ? ? ? ? ? ? ? tbg_add.setTextColor(getResources().getColor(R.color.color_black));? ? ? ? ? ? }? ? ? ? ? ? else{? ? ? ? ? ? ? ? get_add_cla="";? ? ? ? ? ? ? ? tbc_add.setTextColor(getResources().getColor(R.color.color_black));? ? ? ? ? ? }? ? ? ? }? ? });}我忘了提到視圖是通過單擊按鈕添加的。android:onClick="onAddField"
1 回答

四季花海
TA貢獻1811條經驗 獲得超5個贊
問題幾乎可以肯定源于您正在重新使用實例字段(tbg_add
和tbc_add
)作為動態添加新視圖的事實。
tbg_add=(ToggleButton)rowView.findViewById(R.id.add_toggle_gledger); tbc_add=(ToggleButton)rowView.findViewById(R.id.add_toggle_credit);
因為您要重新分配這些字段并從點擊偵聽器中引用它們,所以您將始終引用最近創建的切換按鈕。
將這些更改為局部變量,一切都應該正常工作。
ToggleButton ledger=(ToggleButton)rowView.findViewById(R.id.add_toggle_gledger); ToggleButton credit=(ToggleButton)rowView.findViewById(R.id.add_toggle_credit);
與您的問題無關,但您應該解決的問題是您將null
作為第二個參數傳遞給您的inflate()
調用:
final View rowView=inflater.inflate(R.layout.data_gledger_add_new,null);
當您null
以這種方式傳遞時,系統將無法正確處理新膨脹的視圖LayoutParams
(在 xml 文件中以開頭的任何內容)。android:layout_
您知道最終會將 添加rowView
到您的csl
視圖中,因此您應該將其作為第二個參數傳遞。一旦你這樣做了,你還必須false
作為第三個參數傳遞以確保調用inflate()
實際返回rowView
而不是它的新父級 ( csl
)。
final View rowView=inflater.inflate(R.layout.data_gledger_add_new, csl, false);
添加回答
舉報
0/150
提交
取消