J'ai RecyclerView
avec une vue de texte et une classe personnalisée CheckBoxView
qui est cliquable et a le focus aussi qui est instancié dans l'adaptateur. Toute la logique est dans cette classe.comment désélectionner Image View lorsque vous cliquez sur un autre élément de l'adaptateur
Désormais, lorsqu'une seule ligne a un focus, la case à cocher est Jaune et, lorsqu'elle est cliquée, est grisée. Le problème se produit lorsque je clique sur un autre élément car l'élément précédemment cliqué qui est enregistré en gris ne va pas à l'image vide, mais reste dans l'état précédent.
Il devrait être vide lorsqu'un autre CheckBox est cliqué.
public class MyCheckBoxView {
public enum CheckType {
ACTIVE, // YELLOW When check box has focus on
SELECTED, // GRAY When user selects view
EMPTY // // EMPTY When not selected
}
private CheckType checkType;
private ImageView view;
private boolean isChecked = false;
/**
* Constructor
*/
public MyCheckBoxView() {
setup();
}
//Setup method: Fill In View
private void setup() {
// Create view
view = new ImageView(BeelineApplication.get());
view.setFocusable(true);
view.setClickable(true);
setCheckType(CheckType.EMPTY);
view.setImageResource(R.drawable.beeline_check_box_empty);
// Set CheckBox focus behaviours
view.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
checkType = CheckType.ACTIVE;
view.setImageResource(R.drawable.beeline_check_box_active);
} else {
// NO FOCUS
view.setImageResource(R.drawable.beeline_check_box_empty);
// If checkbox view is checked
if (isChecked) {
view.setImageResource(R.drawable.beeline_check_box_selected);
checkType = CheckType.SELECTED;
} else {
if (checkType == CheckType.SELECTED) {
view.setImageResource(R.drawable.beeline_check_box_selected);
isChecked = true;
} else {
view.setImageResource(R.drawable.beeline_check_box_empty);
isChecked = false;
}
}
}
}
});
// Set CheckBox state on click event
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isChecked) {
view.setImageResource(R.drawable.beeline_check_box_selected);
checkType = CheckType.SELECTED;
} else {
}
}
});
}
// GET VIEW - Called in Adapter
public View getView() {
return view;
}
//Set Check Type
public void setCheckType(CheckType checkType) {
this.checkType = checkType;
}
}