亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何知道從動態添加的視圖中單擊了哪些切換按鈕?

如何知道從動態添加的視圖中單擊了哪些切換按鈕?

斯蒂芬大帝 2023-06-04 15:22:36
這是我第一次使用 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_addtbc_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);


查看完整回答
反對 回復 2023-06-04
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號