0

J'ai un fragment de boîte de dialogue contenant un RecyclerView, dans l'adaptateur RecyclerView j'ai une liste d'éléments à choisir, et si un utilisateur choisit un élément, un TextView dans le fragment devrait changer de couleur et de texte.Changer de vue depuis l'adaptateur android

Adaptateur:

public class ServiceStaffAdapter extends RecyclerView.Adapter<ServiceStaffAdapter.ViewHolder> { 

List<StaffMoreStoreList> StaffMoreStoreItems; 
private Context context; 
private SharedPreferences spStore; 
private ArrayList<String> staffArray, initialsArray = new ArrayList<String>(); 
private View vDialogService; 
private String staffArrayString, staffIdString; 

public ServiceStaffAdapter(List<StaffMoreStoreList> StaffMoreStoreItems, Context context){ 
    super(); 
    this.StaffMoreStoreItems = StaffMoreStoreItems; 
    this.context = context; 
} 


@Override 
public ServiceStaffAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_staff_list, parent, false); 
    ServiceStaffAdapter.ViewHolder viewHolder = new ServiceStaffAdapter.ViewHolder(v); 

    SharedPreferences sp2= context.getSharedPreferences("STORE", Context.MODE_PRIVATE); 
    staffArrayString = sp2.getString("staffArray",""); 
    staffArray = new ArrayList<String>(); 

    if(staffArrayString.equals("")){ 
     staffArray = new ArrayList<String>(); 

    }else{ 
     String replace = staffArrayString.replace("[",""); 
     String replace1 = replace.replace("]",""); 
     List<String> arrayList = new ArrayList<String> (Arrays.asList(replace1.split(","))); 
     staffArray = new ArrayList<String>(); 
     for(String fav:arrayList){ 
      staffArray.add(String.valueOf(fav.trim())); 
     } 
    } 
    //array of string for staffs selected 
    return viewHolder; 
} 


@Override 
public void onBindViewHolder(final ServiceStaffAdapter.ViewHolder holder, int position) { 

    final StaffMoreStoreList staffMoreStoreList = StaffMoreStoreItems.get(position); 

    holder.tvStaffName.setText(staffMoreStoreList.getStaffName()); 


    StaffMoreStoreItems.get(position).getStaffId(); 
    Log.e("staffArray size", String.valueOf(staffArray.size())); 
    Log.e("staff array", staffArray.toString()); 
    staffIdString = staffMoreStoreList.getStaffId(); 
    //pre-select staffs  
    if(staffArray.contains(StaffMoreStoreItems.get(position).getStaffId())){ 
     holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.primary)); 

    }else{ 
     holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.transparent)); 
    } 

    holder.cardStaff.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(staffArray.contains(staffMoreStoreList.getStaffId())){ 
       holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.transparent)); 
       staffArray.removeAll(Collections.singleton(staffMoreStoreList.getStaffId())); 

      }else{ 
       holder.profile_image.setBorderColor(ContextCompat.getColor(context, R.color.primary)); 
       staffArray.add(staffMoreStoreList.getStaffId()); 

      } 

      spStore = context.getSharedPreferences("STORE", Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor1 = spStore.edit(); 
      editor1.putString("staffArray", staffArray.toString());   
      editor1.commit(); 

     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return StaffMoreStoreItems.size(); 
} 

class ViewHolder extends RecyclerView.ViewHolder { 

    private TextView tvStaffName; 
    private CardView cardStaff; 
    private CircleImageView profile_image; 
    private ViewHolder(View itemView) { 
     super(itemView); 

     tvStaffName = (TextView) itemView.findViewById(R.id.tvStaffName); 
     cardStaff = (CardView) itemView.findViewById(R.id.cardStaff); 
     profile_image = (CircleImageView) itemView.findViewById(R.id.profile_image); 
    } 
    } 
} 

En cliquant sur CardViews adaptateur que je veux changer un TextView dans mon fragment contenant le RecyclerView. TextView changera en conséquence sur la taille de staffArray.

Répondre

0

copier ceci à l'intérieur de votre adaptateur. créer une interface pour exécuter onClick.

public interface OnClickListner { 
void setOnItemClick(int postion, View view); 

}

puis créez une instance en vous ADAPTER OnClickListner onClickListner ;

puis créez un setter public void setOnClickListner(OnClickListner onClickListner) { this.onClickListner = onClickListner ; }

maintenant OnBind

holder.myview.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     onClickListner .setOnItemClick(position,view); 
    } 
}); 

puis dans votre fragment coller ceux-ci.

adapter.setOnClickListner(this); 

les erreurs viennent, hower là souris, il vous demandera de mettre en œuvre onclick, implémenter la méthode et faire tout ce que vous voulez faire dans le fragment,

+0

Merci pour la réponse rapide, j'ai suivi votre étape mais sur la dernière étape, je ne peux pas résoudre la méthode .setOnClickListner() – JerryKo

+0

dans l'adaptateur, vous devez créer un setter pour onclick. adapter.yourSetterMethod (this); – xbadal