2016-06-16 15 views
1

私はリサイクル業者です。私はアイテムをクリックします。強調表示されます(背景色を設定します)。そして、別のアイテムをクリックします。古い強調表示されたビューは削除されません。私のクラスは非常にリークです。また、より効果的にするためにアドバイスをくれますか?Recyclerview古いアイテムビューで別のアイテムをクリックしても削除されませんか?

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

答えて

0

解決策が見つかりました。notifyItemChangedを呼び出さないと、それは動作します

関連する問題