0

Ich habe ein unteres Blatt Dialog Fragment mit einem RecyclerView, in der RecyclerView Adapter Ich habe Liste der Elemente zu wählen, und wenn ein Benutzer ein Element wählt, sollte ein TextView in dem Fragment Farbe und Text ändern.Ändern der Ansicht von Adapter Android

Adapter:

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

Während auf CardViews in Adapter klicken Ich möchte ein Textview in meinem Fragment ändern, um die RecyclerView enthält. TextView ändert sich entsprechend an der Größe von staffArray.

Antwort

0

kopieren Sie dies in Ihnen Adapter. Erstellen einer Schnittstelle zum Ausführen von onClick.

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

}

dann eine Instanz erstellen in Sie Adapter OnClickListner onClickListner ;

dann eine Setter erstellen public void setOnClickListner(OnClickListner onClickListner) { this.onClickListner = onClickListner ; }

jetzt in OnBind

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

dann in Ihr Fragment diese einfügen.

adapter.setOnClickListner(this); 

sie Fehler kommen, hower Maus dort werden Sie gefragt, Onclick zu implementieren, Methode implementieren und tun, was Sie in Fragmente tun wollen,

+0

Danke für die schnelle Antwort, ich habe Ihren Schritt aber im letzten Schritt kann ich die Methode .setOnClickListner() – JerryKo

+0

im Adapter nicht lösen, müssen Sie einen Setter für onclick erstellen. adapter.yourSetterMethod (this); – xbadal

Verwandte Themen