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

这是我第一次使用 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"


斯蒂芬大帝
浏览 81回答 1
1回答

四季花海

问题几乎可以肯定源于您正在重新使用实例字段(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&nbsp;ledger=(ToggleButton)rowView.findViewById(R.id.add_toggle_gledger); ToggleButton&nbsp;credit=(ToggleButton)rowView.findViewById(R.id.add_toggle_credit);与您的问题无关,但您应该解决的问题是您将null作为第二个参数传递给您的inflate()调用:final&nbsp;View&nbsp;rowView=inflater.inflate(R.layout.data_gledger_add_new,null);当您null以这种方式传递时,系统将无法正确处理新膨胀的视图LayoutParams(在 xml 文件中以开头的任何内容)。android:layout_您知道最终会将 添加rowView到您的csl视图中,因此您应该将其作为第二个参数传递。一旦你这样做了,你还必须false作为第三个参数传递以确保调用inflate()实际返回rowView而不是它的新父级 (&nbsp;csl)。final&nbsp;View&nbsp;rowView=inflater.inflate(R.layout.data_gledger_add_new,&nbsp;csl,&nbsp;false);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java