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

Java 如何知道从动态添加的视图中单击了哪些切换按钮?,java,android,Java,Android,这是我第一次使用android编程,我被卡住了 现在我尝试动态添加包含切换按钮和编辑文本的视图。但是,每当我选择“切换”按钮时,我创建的选项仅适用于上次创建的视图 选择很简单。有两个切换按钮,可以互斥单击 这意味着每当我在上面添加新视图(如B和C)时,选项只在C上工作,而不在B上工作。如何使其在每个视图上工作 public void onAddField(View v){ LayoutInflater inflater=(LayoutInflater)getSystemService(

这是我第一次使用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));
            }
        }
    });
}
<代码>公共无效onAddField(视图v){ LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务); 最终视图行视图=充气机。充气(R.layout.data_gledger_add_new,null); tbg_add=(ToggleButton)rowView.findviewbyd(R.id.add_toggledger); tbc_add=(ToggleButton)rowView.findviewbyd(R.id.add_toggle_credit);
如果(create_-box,问题几乎肯定是因为您正在使用实例字段(
tbg_-add
tbc_-add
)作为动态添加新视图

因为您正在重新分配这些字段,并且还从单击侦听器中引用它们,所以您将始终引用最近创建的切换按钮

将这些变量更改为局部变量,一切都会正常工作

ToggleButton ledger=(ToggleButton)rowView.findViewById(R.id.add_toggle_gledger);
ToggleButton credit=(ToggleButton)rowView.findViewById(R.id.add_toggle_credit);

与您的问题无关,但也需要解决的是,您正在将
null
作为第二个参数传递给
inflate()
调用:

当您以这种方式传递
null
时,系统将无法正确处理新膨胀视图的
LayoutParams
(xml文件中以
android:layout
开头的任何内容)

您知道最后将把
rowView
添加到
csl
视图中,因此您应该将其作为第二个参数传递。一旦这样做,您还必须将
false
作为第三个参数传递,以确保
inflate()
调用实际返回
rowView
而不是其新的父参数(
csl


很乐意帮助:)嗯,介意我再问你一件事吗?现在我正试图在上面的问题中为“get\u add\u cla”设置值。但如果我以上述方式设置值,无论我创建了多少个视图,get\u add\u cla的每个值的设置都取决于上次创建的视图。我试图存储在数组中,但它不起作用
ToggleButton ledger=(ToggleButton)rowView.findViewById(R.id.add_toggle_gledger);
ToggleButton credit=(ToggleButton)rowView.findViewById(R.id.add_toggle_credit);
final View rowView=inflater.inflate(R.layout.data_gledger_add_new,null);
final View rowView=inflater.inflate(R.layout.data_gledger_add_new, csl, false);