2015-07-12 84 views
1

我有一个RecycleView它显示了一堆列表,其中一个项目通过显示其背景色为蓝色,现在我想要用户从列表中选择任何项目并将其颜色变为蓝色实现这里面RecyclerView.Adapter或任何其他逻辑触摸事件后重绘RecyclerView

public class ToggleAdapter extends RecyclerView.Adapter<ToggleAdapter.ToggleViewHolder>{ 

    private ArrayList<ToggleParams> dataList=new ArrayList<>(); 
    private Context context; 
    private static int selection; 

    public ToggleAdapter(ArrayList<ToggleParams> dataList, Context context,int selection) { 
     setData(dataList,context,selection); 
    } 



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

     ToggleViewHolder toggleViewHolder=new ToggleViewHolder(v); 
     return toggleViewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ToggleViewHolder holder, int position) { 
     if(position==selection){ 
      holder.selected_item.setBackgroundColor(context.getResources().getColor(R.color.blue)); 
      holder.text_view.setTextColor(context.getResources().getColor(android.R.color.white)); 
     } 
     holder.image_view.setImageDrawable(context.getResources().getDrawable(dataList.get(position).getIMAGE_ID())); 
     holder.text_view.setText(dataList.get(position).getTOGGLE_TEXT()); 

    } 

    private void setData(ArrayList<ToggleParams> dataList, Context context,int selection) { 
     this.dataList = dataList; 
     this.context = context; 
     this.selection = selection; 
    } 

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

    public static class ToggleViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

     public LinearLayout selected_item; 
     public ImageView image_view; 
     public TextView text_view; 

     public ToggleViewHolder(View itemView) { 
      super(itemView); 

      selected_item= (LinearLayout) itemView.findViewById(R.id.selected_item); 
      selected_item.setOnClickListener(this); 
      image_view= (ImageView) itemView.findViewById(R.id.imageView); 
      text_view= (TextView) itemView.findViewById(R.id.textView); 
     } 


     public void onClick(View v) { 
      selection=getPosition(); 
      //After getting this position I want that this item list in recyclerview to change its background color but how to call notifyDataSetChange() here something equivalent to that 
     } 
    } 
} 

回答

0

可以在onBindViewHolder使用setOnCLickListener并且可以调用notifyDatasetChanged或有更好的方法是定义被调用被点击的ItemView控件当和接口在适配器中实例化它。例如看到下面的答案 Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?

+0

我不能叫notifyDatasetChanged内onBindViewHolder,因为这个函数是非静态的,它不能在静态类即称为onBindViewHolder –

+0

'onBindViewHolder'是一种方法不是类。 – Nishant

+0

谢谢,它的工作:D –