2016-06-27 15 views
2

Ich eingefügt/Entfernen von bestimmten Position in ArrayList onBindViewHolder. Jetzt möchte ich diese modifizierte Liste auf Recyclerview zeigen.Ändern von Artikeln im Recyclerview-Adapter

Adapter Code:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyAdapterViewHolder> { 
    private List<Info> dataList; 
    private Context mAct; 
    private List<Info> totalCandidatesList; 
    private String TAG = "OWD"; 

    public MyAdapter(List<Info> dataList, Context context) { 
     this.dataList = dataList; 
     this.mAct = context; 
    } 

    public void addApplications(List<Info> candidates) { 

     if(this.totalCandidatesList == null){ 
      totalCandidatesList = new ArrayList<>(); 
     } 
     this.dataList.addAll(candidates); 
     this.totalCandidatesList.addAll(candidates); 
     this.notifyItemRangeInserted(0, candidates.size() - 1); 

    } 

    public void clearApplications() { 
     int size = this.dataList.size(); 
     if (size > 0) { 
      for (int i = 0; i < size; i++) { 
       dataList.remove(0); 
       totalCandidatesList.remove(0); 
      } 
      this.notifyItemRangeRemoved(0, size); 
     } 
    } 

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


    public void onBindViewHolder(MyAdapterViewHolder mAdapterViewHolder, int i) { 

     if (i % 2 == 1) { 
      mAdapterViewHolder.cardView.setCardBackgroundColor(Color.parseColor("#ecf5fe")); 
      mAdapterViewHolder.layoutRipple.setBackgroundColor(Color.parseColor("#ecf5fe")); 
     } else { 
      mAdapterViewHolder.cardView.setCardBackgroundColor(Color.parseColor("#e2f1ff")); 
      mAdapterViewHolder.layoutRipple.setBackgroundColor(Color.parseColor("#e2f1ff")); 
     } 


     final WorkHolders workHolders = SingleTon.getInstance().getWorkHolders(); 
     final String customerName = SingleTon.getInstance().getCustomerName(); 
     String siteName = null; 
     if(customerName !=null) { 
      String[] sitenamearray = customerName.split("--"); 

      if (sitenamearray.length > 1) { 
       siteName = sitenamearray[1]; 
      } 
     } 
     final Info ci = dataList.get(i); 
     mAdapterViewHolder.title.setText(ci.heading1); 
     mAdapterViewHolder.jobNumber.setText(ci.heading2); 
     mAdapterViewHolder.distance.setText(ci.distance); 

     if(siteName != null && siteName.equalsIgnoreCase(ci.heading2)) { 
      mAdapterViewHolder.cardView.setCardBackgroundColor(Color.parseColor("#a7ffeb")); 
      mAdapterViewHolder.layoutRipple.setBackgroundColor(Color.parseColor("#a7ffeb")); 
      if(i!=0){ 


> //Here i removed and inserted item in list . 
>      dataList.remove(i); 
>      dataList.add(0,ci); 

      } 
     } 

     final String finalSiteName = siteName; 
     final Bundle bundle = new Bundle(); 

     mAdapterViewHolder.layoutRipple.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Fragment fragment; 

       String name = ci.heading1 + "--" + ci.heading2; 

       Log.d(TAG,"new Jobname : "+ name); 
       if (finalSiteName == null || finalSiteName.equalsIgnoreCase("")) { 

        bundle.putString("name", customerName); 
        bundle.putString("oldwork", "yes"); 
        bundle.putString("running_job_selected", "yes"); 
       } else { 

        Log.d(TAG,"StartedOn Before Sending Bundle :" + workHolders.startedOn); 
        Log.d(TAG, "running Job is not selected"); 

        bundle.putString("name", name); 
        bundle.putString("oldwork", "yes"); 
        bundle.putString("running_job_selected", "no"); 
       } 

       FragmentTransaction ft = ((FragmentActivity) mAct).getSupportFragmentManager().beginTransaction(); 
       ft.setCustomAnimations(R.anim.glide_fragment_horizontal_in, R.anim.glide_fragment_horizontal_out); 

       fragment = new WorkDescriptionFragment(); 

       fragment.setArguments(bundle); 
       ft.addToBackStack("myadapter"); 
       ft.replace(R.id.content_frame, fragment).commit(); 
       SingleTon.getInstance().setWorkStatus("start"); 
      } 
     }); 

    } 

    @Override 
    public MyAdapterViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View itemView = LayoutInflater. 
       from(viewGroup.getContext()). 
       inflate(R.layout.single_item1, viewGroup, false); 

     return new MyAdapterViewHolder(itemView); 
    } 

    public static class MyAdapterViewHolder extends RecyclerView.ViewHolder { 

     protected TextView title; 
     protected TextView dateTime; 
     protected TextView distance; 
     protected TextView jobNumber; 

     protected CardView cardView; 
     protected LayoutRipple layoutRipple; 

     public MyAdapterViewHolder(View v) { 
      super(v); 
      title = (TextView) v.findViewById(R.id.title); 
      dateTime = (TextView) v.findViewById(R.id.dateTimeTextView); 
      distance = (TextView) v.findViewById(R.id.distanceTextView); 
      jobNumber = (TextView) v.findViewById(R.id.jobNumber); 
      cardView = (CardView) v.findViewById(R.id.cv); 
      layoutRipple = (LayoutRipple)v.findViewById(R.id.singleitemripple); 
     } 
    } 

} 

werden Sie folgende Zeilen in obigem Code sehen, wo ich bin Entfernen/Einfügen Element in einer Liste onBindview und mag in recyclerview gleiche zeigen.

Aber im Moment bekomme ich normale Daten (unverändert).

//Here i removed and inserted item in list . 
         dataList.remove(i); 
         dataList.add(0,ci); 

Bitte helfen Sie mir, dies zu erreichen.

+0

Bitte versuchen Sie, Ihr Problem genauer zu erklären. Es ist nicht klar, was Sie versuchen zu erreichen. –

+0

@alexeypolusov: Ich möchte Adapter Dataist Element in OnBindViewHolder Methode ändern –

+0

Warum müssen Sie Daten dort aktualisieren? Wenn Sie Daten aktualisieren möchten, aktualisieren Sie einfach den List Inside you Adapter und dann nofifyDataChanged() –

Antwort

1

onBindViewHolder ist nicht der Ort, wo Sie Ihren Adapter aktualisieren sollten. Die Staregie besteht darin, das Element in der Adapterdatenliste zu aktualisieren und dann notifyDataChanged(). Zum Beispiel thesee sind die Methoden zum Aktualisieren von Informationen in meinem Adapter:

public void update(Track track) { 
     tracks.remove(track); 
     add(track); 
    } 

    public void add (Track track) { 
     tracks.add(track); 
     this.notifyDataSetChanged(); 
    } 

    public void addTracks(List<Track> tracks){ 
     this.tracks.addAll(tracks); 
     this.notifyDataSetChanged(); 
    } 

    public void clearAndAddTracks(List<Track> tracks) { 

     for (int i = 0; i < this.tracks.size(); i++) { 
      if (!this.tracks.get(i).isRunning()){ 

      } 
     } 
     this.tracks.clear(); 
     this.tracks.addAll(tracks); 
     this.notifyDataSetChanged(); 
    } 
+0

Danke für die Antwort. Ich habe meinen Code entsprechend deinem Rat geändert. Vielen Dank . Auch wäre ich dankbar, wenn Sie die Frage auffrischen würden. Danke noch einmal –

Verwandte Themen