这是我第一次使用 android 编程,我被卡住了。现在我正在尝试动态添加包含切换按钮和编辑文本的视图。但是,每当我选择切换按钮时,我创建的选项仅适用于上次创建的视图。选项很简单。有两个切换按钮,它们可以互斥例子这意味着每当我在上面添加新视图(例如 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
提交
取消