2017-09-14 3 views
0

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é.

This is when there is one clicked item - Gray, and one Focused item - Yellow

Now when clicked on German item, the Russian should go empty, not gray colored

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; 
} 

}

Répondre

0

vous devriez faire quelque chose comme ça
Quand une case est cochée gris supprimer de chaque case, puis appliquer gris à la case cliqué
Lorsque vous va vérifier, vous obtiendrez l'identifiant de la case à cocher et cochée et vous pouvez le mettre en gris à setOnClickListener!
Assurez-vous d'ajouter

view.setImageResource(R.drawable.beeline_check_box_selected); 
      checkType = CheckType.SELECTED; 

après avoir supprimé tout le gris!