gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:28:54 24 4
gpt4 key购买 nike

这是我第一次使用 android 编程,我被卡住了。

现在我正在尝试动态添加包含切换按钮和编辑文本的 View 。但是,每当我选择切换按钮时,我创建的选项仅适用于上次创建的 View 。

选项很简单。有两个切换按钮,可以互斥点击

example

这意味着每当我在上面添加新 View (例如 B 和 C)时,选项仅适用于 C 而不适用于 B。我怎样才能让它适用于每个 View ?

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));
}
}
});
}

我忘了提到 View 是通过单击按钮添加的。 android:onClick="onAddField"

最佳答案

这个问题几乎可以肯定是因为您正在重复使用实例字段(tbg_addtbc_add)来动态添加新 View 。

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_ 开头的任何内容)用于新膨胀的 View 。

您知道您最终将添加 rowView给你的csl View ,因此您应该将其作为第二个参数传递。一旦你这样做了,你还必须通过 false作为第三个参数,以确保 inflate()调用实际上返回 rowView而不是它的新父级(csl)。

final View rowView=inflater.inflate(R.layout.data_gledger_add_new, csl, false);

关于java - 如何知道从动态添加的 View 中单击了哪些切换按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com