Java 触摸事件后重新绘制RecyclerView
我有一个RecycleView,它显示了一组列表,其中一个项目是通过显示其背景颜色蓝色来选择的,现在我希望用户从列表中选择任何项目,并将其颜色更改为蓝色。如何在RecycleView.Adapter或任何其他逻辑中实现这一点Java 触摸事件后重新绘制RecyclerView,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个RecycleView,它显示了一组列表,其中一个项目是通过显示其背景颜色蓝色来选择的,现在我希望用户从列表中选择任何项目,并将其颜色更改为蓝色。如何在RecycleView.Adapter或任何其他逻辑中实现这一点 public class ToggleAdapter extends RecyclerView.Adapter<ToggleAdapter.ToggleViewHolder>{ private ArrayList<ToggleParams
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
}
}
}
public类ToggleAdapter扩展了RecyclerView.Adapter{
private ArrayList dataList=new ArrayList();
私人语境;
私有静态int选择;
公共TogleAdapter(ArrayList数据列表、上下文、整型选择){
setData(数据列表、上下文、选择);
}
@凌驾
公共切换ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.card\u View\u row,parent,false);
ToggleViewHolder ToggleViewHolder=新的ToggleViewHolder(v);
返回开关视窗支架;
}
@凌驾
公共无效onBindViewHolder(切换ViewHolder,int位置){
如果(位置==选择){
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());
}
私有void setData(ArrayList数据列表、上下文上下文、整数选择){
this.dataList=dataList;
this.context=上下文;
this.selection=选择;
}
@凌驾
public int getItemCount(){
返回dataList.size();
}
公共静态类ToggleViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共线路布置所选项目;
公共图像视图图像视图;
公共文本视图文本视图;
公共切换ViewHolder(查看项目视图){
超级(项目视图);
selected_item=(LinearLayout)itemView.findViewById(R.id.selected_item);
所选的_item.setOnClickListener(此);
image\u view=(ImageView)itemView.findviewbyd(R.id.ImageView);
text_view=(TextView)itemView.findViewById(R.id.TextView);
}
公共void onClick(视图v){
selection=getPosition();
//获得此位置后,我希望recyclerview中的此项列表更改其背景颜色,但如何在此处调用notifyDataSetChange(),与此等效
}
}
}
您可以使用onBindViewHolder
中的setOnCLickListener
,并可以在那里调用notifyDatasetChanged
,或者更好的方法是定义一个在单击itemView时被调用的接口,并在适配器中实例化它。例如,请参见下面的答案
您可以使用
onBindViewHolder
中的setOnCLickListener
,并可以在那里调用notifyDatasetChanged
,或者更好的方法是定义一个在单击itemView时被调用的接口,并在适配器中实例化它。例如,请参见下面的答案
我无法在onBindViewHolder内部调用notifyDatasetChanged,因为此函数是非静态的,不能在静态类中调用,即onBindViewHolder
onBindViewHolder
是一个方法而不是类。我无法在onBindViewHolder内部调用notifyDatasetChanged,因为此函数是非静态的,不能在静态类中调用,即onBindViewHolderonBindViewHolder
是一个方法而不是类。