Reputation: 1364
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.
Upvotes: 2
Views: 4398
Reputation: 1364
Okay , I got an answer. Actually there were two issues , which I have found during finding solution :
Here are few reference which I referred :
A) Radio Button is only partially checked
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)
Upvotes: 4
Reputation: 2628
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.
Upvotes: 0