2

I think this question may be asked before but this issue happened with me too so , I'm asking here again to see we can get some solution over it.

So basically problem is making Checkbox checked Programmatically not working with Kotlin code . To explain , I'm sharing my code & screenshot of problem.

     //filterContraints is ArrayList<Integer> type

     if(filterContraints!!.size > 0){

        filterContraints!!.forEach {

        Log.d(TAG, "For each filter constraints : $it")
        if(it == AppConstants.MAC_OS && !chkMacOS!!.isChecked)
        {
           chkMacOS!!.isChecked = true
        }
        if(it == AppConstants.WINDOWS_OS && !chkWindows!!.isChecked)
        {
           chkWindows!!.isChecked = true
        }
        if(it == AppConstants.LINUX_OS && !chkLinux!!.isChecked)
        {
           chkLinux!!.isChecked = true
        }
        if(it == AppConstants.ALL_OS && !chkAllOs!!.isChecked)
        {
           chkAllOs!!.isChecked = true
        }
      }
   }

Here is xml of entire layout :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:background="@android:color/white"
    android:clickable="true"
    android:clipToPadding="false"
    android:fitsSystemWindows="true"
    app:behavior_hideable="true"
    app:behavior_peekHeight="0dp"
    app:layout_behavior="@string/bottom_sheet_behavior">

    <TextView
        android:id="@+id/txt_filter_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="@color/darkestGrey"
        android:layout_marginTop="@dimen/padd_10"
        android:text="@string/txt_filter_payload"
        android:fontFamily="sans-serif-medium"
        android:textStyle="bold"
        android:textSize="18sp" />


    <LinearLayout
        android:id="@+id/row_filter_categories"
        android:layout_width="wrap_content"
        android:layout_below="@+id/txt_filter_title"
        android:layout_marginTop="@dimen/padd_10"
        android:layout_centerHorizontal="true"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/chk_mac"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:text="@string/chk_os_mac" />

        <CheckBox
            android:id="@+id/chk_windows"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/padd_10"
            android:layout_marginEnd="@dimen/padd_10"
            android:textSize="15sp"
            android:text="@string/chk_os_windows" />

        <CheckBox
            android:id="@+id/chk_linux"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:text="@string/chk_os_linux" />

        <CheckBox
            android:id="@+id/chk_all_os"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:textAllCaps="false"
            android:text="@string/chk_os_all" />

    </LinearLayout>

    <Button
        android:id="@+id/btn_apply_filter"
        android:layout_width="wrap_content"
        android:layout_below="@+id/row_filter_categories"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:layout_marginEnd="@dimen/padd_10"
        android:layout_alignParentEnd="true"
        android:gravity="center"
        android:background="@color/colorPrimary"
        android:textColor="@color/white"
        android:layout_height="wrap_content"
        android:textSize="15sp"
        android:text="@string/txt_apply_filter" />

</RelativeLayout>

And here is declarations part in Kotlin:

    private var chkMacOS: CheckBox? = null
    private var chkWindows: CheckBox? = null
    private var chkLinux: CheckBox? = null
    private var chkAllOs: CheckBox? = null

Here is retrieving part:

    chkMacOS = fragmentView.findViewById(R.id.chk_mac)
    chkWindows = fragmentView.findViewById(R.id.chk_windows)
    chkLinux = fragmentView.findViewById(R.id.chk_linux)
    chkAllOs = fragmentView.findViewById(R.id.chk_all_os)

And here is output: See last two checkbox , only border is coloured but not selected.

enter image description here

Deep Shah
  • 1,334
  • 3
  • 20
  • 41

2 Answers2

3

Okay , I got an answer. Actually there were two issues , which I have found during finding solution :

  1. This issue is not related to Kotlin , this is happening in Java too.
  2. setChecked worked with Android 5.0 but not working with Nougat

Here are few reference which I referred :

A) Radio Button is only partially checked

B) Android Nougat: Why do checkboxes on Fragment have incomplete state when selected programmatically (but look fine on Lollipop)

And here is a solution which works for me on both android versions:

chkMacOS!!.post {
    chkMacOS!!.setChecked(true)
    chkMacOS!!.jumpDrawablesToCurrentState() // This is most important 
   }

I hope this helps anyone who is looking for similar kind of solution (thx @Nipper)

Deep Shah
  • 1,334
  • 3
  • 20
  • 41
0

I don't believe that checkbox check is not supported in kotlin. It's in your case not working properly. You must've done something messy in your code as we're only able to see peace of code not sure what's wrong with your code. Above code is fine otherwise should work, please check the way you've created checkbox.

Also use latest stable release of kotlin always.

MobileEvangelist
  • 2,583
  • 1
  • 25
  • 36
  • I have created checkbox using XML only & these checkboxes are not much used in full code. Do you need xml or any more code for reference? – Deep Shah Apr 04 '19 at 16:36
  • Yes more code specifically the creator part and xml declarations for the same, will help me understand the prob. – MobileEvangelist Apr 05 '19 at 03:38