Android复选框可见性问题

时间:2010-05-20 15:27:04

标签: android layout checkbox view visibility

我在我的代码中使用了一个复选框,当它选中它时会显示textview和editText,但是如果我取消选中de复选框,它们将继续显示而不是消失。

以下是代码:

final CheckBox save = (CheckBox) findViewById(R.id.checkbox);
        save.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {



                // Perform action on clicks, depending on whether it's now checked
                if (((CheckBox) v).isChecked()) {

                    nameText.setVisibility(1);
                    editName.setVisibility(1);

                } else {

                    nameText.setVisibility(0);
                    editName.setVisibility(0);

                }
            }
        });

在相对布局中的部分xml:

    <LinearLayout android:id="@+id/linearLayout3"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below = "@+id/linearLayout2">

    <TextView android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="@string/name" 
        android:visibility="invisible"/>
    <EditText android:id="@+id/name" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:visibility="invisible"/>    


    <CheckBox android:id="@+id/checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/save" />
</LinearLayout>

当我取消选中复选框时,我该怎么做才能使textView和EditText消失?

谢谢!

3 个答案:

答案 0 :(得分:14)

使用View.VISIBLEView.INVISIBLEView.GONE来控制可见性(而不是0&amp; 1)。

答案 1 :(得分:6)

两件事:

  1. 您应该使用setOnCheckedChangeListener(),这会让您的生活更轻松。

  2. 您应该使用View.GONE和View.VISIBLE代替setVisibility()的整数。

答案 2 :(得分:2)

问题出在这一部分:

 // Perform action on clicks, depending on whether it's now checked
                if (((CheckBox) v).isChecked()) {

                    nameText.setVisibility(1);
                    editName.setVisibility(1);

                } else {

                    nameText.setVisibility(0);
                    editName.setVisibility(0);

                }

你不应该使用整数值,而是使用视图类提供的常量

//对点击执行操作,具体取决于现在是否已选中                 if(((CheckBox)v).isChecked()){

                nameText.setVisibility(View.VISIBLE);
                editName.setVisibility(View.VISIBLE);

            } else {

                nameText.setVisibility(VIEW.INVISIBLE);
                editName.setVisibility(VIEW.INVISIBLE);

            }

而不是隐形你也可以使用GONE。那么你的隐形textedit在布局中不需要空间

如果您检查API,您会看到1不是有效参数: