This is not so much of a problem but I am trying to find a correct way of doing this.
I have the following situation:
public class SettingsDialogFragment extends DialogFragment implements OnCheckedChangeListener {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.settings, container);
...
CheckBox lBox1 = (CheckBox)view.findViewById(R.id.checkBox1);
lBox1.setOnCheckedChangeListener(this);
lBox1.setChecked(true);
return view;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
....
}
The "problem" I have is that by calling setChecked(true)
the onCheckChanged will already fire. I guess that when I inflate the layout - the CheckBox
is initialised with a false setting and me changing that to true indeed is a CheckedChanged
event.
I could of course change the order and assign the listener after I set the initial value, but is there a way to inflate the layout whilst somehow passing the initial values for the various components? They are dynamic so I cannot fix the values to a particular value in the settings.xml
Cheers
The above suggestion is good, but this problem still exists in a checkable ListView. I solved it in this way: disable the listener, set check state, and then set listener again. Here is a helper function:
private void checkCheckBox(CheckBox checkBox, boolean checked) {
checkBox.setOnCheckedChangeListener(null);
checkBox.setChecked(checked);
checkBox.setOnCheckedChangeListener(this);
}
You've answered your own question, the setChecked(true)
is causing the OnCheckedChangeListener
to be called.
A simple fix would be to add android:checked="true"
to your CheckBox XML declaration and omit the setChecked(true)
call.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With