Я пытаюсь реализовать пользовательский CheckBoxPreference
- такой, где, если пользователь нажимает на фактический флажок, он переключает состояние, но если он нажимает на имя, он открывает вместо него фрагмент предпочтения. Для этого я переопределил метод OnBindView(View view)
, удалил прослушиватель кликов view
и пытаюсь добавить OnClickListener
к каждому из его дочерних представлений по отдельности. Однако OnClickListener
, связанный с Android.Support.V7.Widget.AppCompatCheckBox
, не обновляет видимое состояние флажка, даже если само предпочтение было успешно сохранено
protected override void OnBindView(View view)
{
base.OnBindView(view);
view.Clickable = false;
ViewGroup vg = (ViewGroup)view;
for (int i = 0; i < vg.ChildCount - 1; i++)
{
vg.GetChildAt(i).SetOnClickListener(new DoOpenFragment(this));
}
vg.GetChildAt(vg.ChildCount - 1).SetOnClickListener(new DoCheckBoxClick(this));
}
private class DoCheckBoxClick : Java.Lang.Object, View.IOnClickListener
{
private OpenFragmentCheckboxPreference Pref;
public DoCheckBoxClick(OpenFragmentCheckboxPreference pref)
{
Pref = pref;
}
public void OnClick(View v)
{
var b0 = Pref.GetPersistedBoolean(true);
Pref.PersistBoolean(!b0);
var cb = ((v as ViewGroup).GetChildAt(0) as Android.Support.V7.Widget.AppCompatCheckBox);
var b1 = Pref.GetPersistedBoolean(true);
cb.Checked = b1;
Pref.NotifyChanged();
cb.Invalidate();
}
}
Как видите, я пытаюсь использовать как метод NotifyChanged
Preference, так и метод Invalidate
фактического виджета CheckBox, но ни один из них не работает. (Дополнительные, ненужные переменные только для отладки). Любая идея, что вызов я мог бы пропустить, что на самом деле приведет к перерисовке флажка и отображать его правильное состояние? Спасибо!