2016-06-16 9 views
1

Ich habe eine Recyclerview. Ich klicke auf einen Gegenstand. Es ist hervorgehoben (Hintergrund - Farbe). Und dann klicke ich auf ein anderes Element, es entfernt nicht die alte hervorgehobene Ansicht. Meine Klasse ist sehr undicht. Könnten Sie mir auch einen Rat geben, um effektiver zu werden?Recyclerview alte Artikelansicht wird nicht entfernt, wenn Sie auf ein anderes Element klicken.

public class DrawerMenuShelfListAdapter extends RecyclerView.Adapter<DrawerMenuShelfListAdapter.ViewHolder> implements View.OnClickListener { 

    private int selectedRow = 0; 

    public Fragment fragment; 
    public ViewHolder holder; 
    public RecyclerView recyclerView; 

    private ArrayList<ShelfModel> shelfList; 

    public DrawerMenuShelfListAdapter(Fragment fragment, ArrayList<ShelfModel> shelfList, RecyclerView recyclerView) { 
     this.shelfList = shelfList; 
     this.fragment = fragment; 
     this.recyclerView = recyclerView; 
    } 

    public void setItemSelected(int position){ 
     recyclerView.getChildAt(selectedRow).setBackgroundColor(fragment.getActivity().getResources().getColor(android.R.color.transparent)); 
     notifyItemChanged(selectedRow); 
     selectedRow = position; 
     recyclerView.getChildAt(selectedRow).setBackgroundColor(fragment.getActivity().getResources().getColor(android.R.color.black)); 
     notifyItemChanged(selectedRow); 
    } 

    public void updateList(ArrayList<ShelfModel> list){ 
     shelfList.clear(); 
     shelfList.addAll(list); 
     notifyDataSetChanged(); 
     notifyItemChanged(selectedRow); 
    } 

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

     holder = new ViewHolder(v); 
     holder.text = (TextView) v.findViewById(R.id.definitionText); 
     holder.total = (TextView) v.findViewById(R.id.countText); 
     holder.editButton = (ImageButton)v.findViewById(R.id.editButton); 
     holder.text.setTypeface(App.MUSEO_100); 
     holder.total.setTypeface(App.MUSEO_300); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position) { 
     final ShelfModel shelfModel = shelfList.get(position); 
     holder.text.setText(shelfModel.getName()); 
     holder.total.setText(String.valueOf(shelfModel.getTotal())); 
     holder.shelfId = shelfModel.getShelfId(); 
     holder.itemView.setOnClickListener(this); 
    } 

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

    @Override 
    public void onClick(View v) { 
     int position = recyclerView.getChildLayoutPosition(v); 
     ((DrawerMenuShelfListListener)fragment).onShelfItemClick(shelfList.get(position)); 
     setItemSelected(position); 

    } 

    public interface DrawerMenuShelfListListener extends BaseRecyclerViewListener { 
     void onShelfItemClick(ShelfModel shelfModel); 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 
     public TextView text; 
     public TextView total; 
     public ImageView editButton; 
     public int shelfId; 
     public ViewHolder(View view) { 
      super(view); 
     } 
    } 
} 

Antwort

0

Ok. Ich habe die Lösung gefunden. Wenn ich notifyItemChanged nicht anrufe, funktioniert es

Verwandte Themen