为了账号安全,请及时绑定邮箱和手机立即绑定

如何知道从动态添加的视图中单击了哪些切换按钮?

如何知道从动态添加的视图中单击了哪些切换按钮?

斯蒂芬大帝 2023-06-04 15:22:36
这是我第一次使用 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_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 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信