Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 触摸事件后重新绘制RecyclerView_Java_Android_Android Recyclerview - Fatal编程技术网

Java 触摸事件后重新绘制RecyclerView

Java 触摸事件后重新绘制RecyclerView,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个RecycleView,它显示了一组列表,其中一个项目是通过显示其背景颜色蓝色来选择的,现在我希望用户从列表中选择任何项目,并将其颜色更改为蓝色。如何在RecycleView.Adapter或任何其他逻辑中实现这一点 public class ToggleAdapter extends RecyclerView.Adapter<ToggleAdapter.ToggleViewHolder>{ private ArrayList<ToggleParams

我有一个RecycleView,它显示了一组列表,其中一个项目是通过显示其背景颜色蓝色来选择的,现在我希望用户从列表中选择任何项目,并将其颜色更改为蓝色。如何在RecycleView.Adapter或任何其他逻辑中实现这一点

    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,因为此函数是非静态的,不能在静态类中调用,即onBindViewHolder
onBindViewHolder
是一个方法而不是类。