Checkbox android无法正常工作

时间:2015-10-28 06:02:29

标签: android android-checkbox

在选中复选框后,应显示Textview。但是,它没有发生。当我点击复选框时,它会被检查,但texview不会出现。我已将textview的可见性设置为XML中的GONE。但是,选中复选框后,我将其设置为VISIBLE。

View footer = inflater.inflate(R.layout.footer, viewGroup,
                    false);


   final CheckBox chb = (CheckBox) footer.findViewById(R.id.notify_confirm);
                final TextView notify_tv = (TextView) footer.findViewById(R.id.notify_tv);



                chb.setOnClickListener(new OnClickListener() {

              @Override
              public void onClick(View v) {

                if (chb.isChecked()) 
                {
                    //new CheckBoxThread().execute();
                      notify_tv.setVisibility(View.VISIBLE);    

                }
                else 
                {

                }

              }

            });

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
                              android:layout_width="fill_parent"
    android:layout_height="wrap_content"
               android:paddingLeft="6dp"
                android:orientation="vertical" 
                  android:background="#ffffff"
         >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"

       >

         <CheckBox
             android:id="@+id/notify_confirm"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginLeft="10dp"
             android:text="Notify on Confirmation"
             android:textColor="#4d4d4d"
             android:paddingLeft="5dp"
             android:visibility="visible"

             />
         <TextView
             android:id = "@+id/notify_tv"
             android:layout_width="fill_parent"
             android:textColor = "@color/myPrimaryColor"
             android:gravity="center"
             android:visibility="gone"
             android:layout_height="wrap_content"
             android:text="You will be notified on confirmation"></TextView>

    </LinearLayout>
</LinearLayout>

提出这个问题对我来说可能有点天真,但我已经尝试了所有的东西而且它似乎没有用。

4 个答案:

答案 0 :(得分:2)

不使用OnClickListener,而是使用OnCheckedChangeListener作为复选框。替换您的代码如下。

chb.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if ( isChecked )
        {
            // perform logic
            notify_tv.setVisibility(View.VISIBLE);    
        }

    }
});

答案 1 :(得分:0)

Add this property to the checkbox widget android:onClick="onCheckboxClicked"/>

Within the Activity that hosts this layout, the following method handles the click event for both checkboxes:

public void onCheckboxClicked(View view) {
    // Is the view now checked?
    boolean checked = ((CheckBox) view).isChecked();

    // Check which checkbox was clicked
    switch(view.getId()) {
        case R.id.notify_confirm:
            if (checked)
                //visible the textview here
            else
                //
            break;

答案 2 :(得分:0)

根据您使用onClickListener的方式:

chkBox.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
                //is chkIos checked?
        if (((CheckBox) v).isChecked()) {
            Toast.makeText(MyAndroidAppActivity.this,
               "Bro, try Android :)", Toast.LENGTH_LONG).show();
        }
else{
//do else work
}

      }
    });

其他更好的方法是使用:

 CompoundButton.OnCheckedChangeListener:

如Lal先生所述。

由于

答案 3 :(得分:0)

我检查了你的代码很好,但只是一点方向(布局方向)问题就在那里。 并且不要使用TextView:visibility:&#34; gone&#34; (已经过时会更新你的视图,你的视图会分散)而不是使用&#34;隐形&#34;,它不会影响你的观点。

刚刚把android:orientation =&#34; vertical&#34;在你的第二个LinearLayout上。

这是您修改后的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical"
    android:paddingLeft="6dp" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible" 
        android:orientation="vertical">

        <CheckBox
            android:id="@+id/notify_confirm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:paddingLeft="5dp"
            android:text="Notify on Confirmation"
            android:textColor="#4d4d4d"
            android:visibility="visible" />

        <TextView
            android:id="@+id/notify_tv"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="You will be notified on confirmation"
            android:textColor="#000000"
            android:visibility="invisible" >
        </TextView>      
    </LinearLayout>
</LinearLayout>

这是你的java文件:

final CheckBox chb = (CheckBox) findViewById(R.id.notify_confirm);
final TextView notify_tv = (TextView)findViewById(R.id.notify_tv);
      chb.setOnClickListener(new OnClickListener() {

          @Override
          public void onClick(View v) {
            if (chb.isChecked()) 
            {
                //new CheckBoxThread().execute();
                  notify_tv.setVisibility(View.VISIBLE);    
            }
            else 
            {
                 notify_tv.setVisibility(View.INVISIBLE);   
            }
          }
        });

这将有效......:)