Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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,当ILog.I(“adapterPos”,String.valueOf(adapter.adapterPos))时更新在onsweep中,即使在将其设置为-1之前,它也会返回-1 我有一个recyclerView,还有一个自定义适配器,用于显示有关练习的信息 当用户点击recyclerView项目时,项目背景设置为绿色,保存按钮变为更新按钮,以便用户可以更新其现有录制的练习 我还有一个在片段中实现的onsweep方法。当用户滑动项目时,它将从数据库中删除 当用户滑动以删除项目时,我希望将所有项

当I
Log.I(“adapterPos”,String.valueOf(adapter.adapterPos))时更新在onsweep中,即使在将其设置为-1之前,它也会返回-1

我有一个
recyclerView
,还有一个
自定义适配器
,用于显示有关练习的信息

当用户点击recyclerView项目时,项目背景设置为绿色,保存按钮变为更新按钮,以便用户可以更新其现有录制的练习

我还有一个在片段中实现的onsweep方法。当用户滑动项目时,它将从数据库中删除

当用户滑动以删除项目时,我希望将所有项目的背景设置回默认值(灰色)

这怎么可能呢

注意:如果选择了项目2,并且用户决定滑动项目1,即使删除了项目1,项目2当前仍处于选中状态

记录练习片段(相关代码)

@覆盖
已单击的公共无效OneXercise(内部位置){
如果(recyclerItemClicked==false){
saveBtn.setText(“更新”);
clearBtn.setVisibility(View.GONE);
recyclerItemClicked=true;
双击重量=适配器。获取重量(位置);
String selectedWeightString=Double.toString(selectedWeight);
editTextWeight.setText(selectedWeightString);
int selectedReps=adapter.getReps(位置);
String selectedrepstring=Integer.toString(selectedReps);
editTextReps.setText(SelectedRepString);
}否则{
clearBtn.setVisibility(View.VISIBLE);
saveBtn.setText(“保存”);
recyclerItemClicked=false;
}
}
public void initRecyclerView(){
适配器=新完成的exerciseslistadapter2(allExercises,this);
recyclerView.setAdapter(适配器);
新建ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);
}
公开练习(列表练习){
allExercises.clear();
allExercises.addAll(练习);
}
ItemTouchHelper.SimpleCallback itemTouchHelperCallback=新建ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT){
@凌驾
公共布尔onMove(@NonNull RecyclerView RecyclerView,@NonNull RecyclerView.ViewHolder ViewHolder,@NonNull RecyclerView.ViewHolder target){
返回false;
}
@凌驾
公共void onsweed(@NonNull RecyclerView.ViewHolder ViewHolder,int-direction){
int logID=allExercises.get(viewHolder.getAdapterPosition()).getLog_id();
logViewModel.deleteByID(logID);
clearBtn.setVisibility(View.VISIBLE);
saveBtn.setText(“保存”);
Log.i(“adapterPos”,String.valueOf(adapter.adapterPos));//由于某些原因,它始终是-1
//备份当前选定的位置
int selectedPos=adapter.adapterPos;
//将当前选择的位置更改为-1
adapter.adapterPos=-1;
adapter.notifyItemChanged(selectedPos);
}
};
适配器

public class CompletedExercisesListAdapter2 extends RecyclerView.Adapter {

    private OnExerciseClickListener onExerciseClickListener;
    private List<Log_Entries> allCompletedExercises = new ArrayList<>();
    public int adapterPos = -1;
    public boolean isSelected = false;

    public CompletedExercisesListAdapter2(ArrayList<Log_Entries> allCompletedExercises, OnExerciseClickListener onExerciseClickListener) {
        this.allCompletedExercises = allCompletedExercises;
        this.onExerciseClickListener = onExerciseClickListener;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view;

        if (viewType == 0) {
            view = layoutInflater.inflate(R.layout.new_completed_exercise_item, parent, false);
            return new ViewHolderOne(view, onExerciseClickListener);
        }

        view = layoutInflater.inflate(R.layout.completed_exercise_item, parent, false);
        return new ViewHolderTwo(view, onExerciseClickListener);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        if (getItemViewType(position) == 0) {
            ViewHolderOne viewHolderOne = (ViewHolderOne) holder;

            if (adapterPos == position) {
                viewHolderOne.relativeLayout.setBackgroundColor(Color.parseColor("#567845"));
            }
            else {
                    viewHolderOne.relativeLayout.setBackgroundResource(R.color.dark_grey);
            }

            viewHolderOne.textViewExerciseName.setText(String.valueOf(allCompletedExercises.get(position).getChildExerciseName()));
            viewHolderOne.textViewSetNumber.setText(String.valueOf(viewHolderOne.getAdapterPosition() + 1));
            viewHolderOne.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position).getTotal_weight_lifted()));
            viewHolderOne.textViewReps.setText(String.valueOf(allCompletedExercises.get(position).getReps()));

        } else if (getItemViewType(position) == 1) {
            ViewHolderTwo viewHolderTwo = (ViewHolderTwo) holder;

            if (adapterPos == position) {
                viewHolderTwo.relativeLayout.setBackgroundColor(Color.parseColor("#567845"));
            } else {
                viewHolderTwo.relativeLayout.setBackgroundResource(R.color.dark_grey);
            }

            viewHolderTwo.textViewSetNumber.setText(String.valueOf(viewHolderTwo.getAdapterPosition() + 1));
            viewHolderTwo.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position).getTotal_weight_lifted()));
            viewHolderTwo.textViewReps.setText(String.valueOf(allCompletedExercises.get(position).getReps()));
        }
    }

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

    @Override
    public int getItemViewType(int position) {

        // if list is sorted chronologically
        if (position == 0) {
            return 0;
        }
        if (allCompletedExercises.get(position).getChildExerciseName().equals(allCompletedExercises.get(position - 1).getChildExerciseName())) {
            return 1;
        } else {
            return 0;
        }
    }

    public class ViewHolderOne extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView textViewExerciseName;
        private TextView textViewSetNumber;
        private TextView textViewWeight;
        private TextView textViewReps;

        OnExerciseClickListener mOnExerciseClickListener;

        private RelativeLayout relativeLayout;

        public ViewHolderOne(@NonNull View itemView, OnExerciseClickListener onExerciseClickListener) {
            super(itemView);

            textViewExerciseName = itemView.findViewById(R.id.textView_ExerciseName3);
            textViewSetNumber = itemView.findViewById(R.id.textView_Set_Number56);
            textViewWeight = itemView.findViewById(R.id.textView_weight78);
            textViewReps = itemView.findViewById(R.id.textView_repss0);
            mOnExerciseClickListener = onExerciseClickListener;
            relativeLayout = (RelativeLayout) itemView.findViewById(R.id.exercise_item_relative);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            onExerciseClickListener.onExerciseClicked(getAdapterPosition());
            if (isSelected) {
                adapterPos = -1;
                isSelected = false;

            } else {
                adapterPos = getAdapterPosition();
                isSelected = true;
            }
            notifyDataSetChanged();
        }
    }

    class ViewHolderTwo extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView textViewSetNumber;
        private TextView textViewWeight;
        private TextView textViewReps;
        OnExerciseClickListener mOnExerciseClickListener;
        private RelativeLayout relativeLayout;

        public ViewHolderTwo(@NonNull View itemView, OnExerciseClickListener onExerciseClickListener) {
            super(itemView);
            textViewSetNumber = itemView.findViewById(R.id.textView_Set_Number);
            textViewWeight = itemView.findViewById(R.id.textView_weight);
            textViewReps = itemView.findViewById(R.id.textView_repss);
            relativeLayout = (RelativeLayout) itemView.findViewById(R.id.exercise_item_rel);
            mOnExerciseClickListener = onExerciseClickListener;
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            onExerciseClickListener.onExerciseClicked(getAdapterPosition());

            if (!isSelected) {
                adapterPos = getAdapterPosition();
                isSelected = true;

            } else {
                adapterPos = -1;
                isSelected = false;
            }
            notifyDataSetChanged();
        }
    }

    public interface OnExerciseClickListener {
        void onExerciseClicked(int position);
    }

    public double getWeight(int position) {
        double weight = allCompletedExercises.get(position).getTotal_weight_lifted();
        return weight;
    }

    public int getReps(int position) {
        int reps = allCompletedExercises.get(position).getReps();
        return reps;
    }
}

public类CompletedExercisesListAdapter2扩展了RecyclerView.Adapter{
私用一台XerciseClickListener一台XerciseClickListener;
private List allCompletedExercises=new ArrayList();
公共int adapterPos=-1;
公共布尔值isSelected=false;
public CompletedExercisesListAdapter2(数组列出所有已完成的练习,一个XerciseClickListener一个XerciseClickListener){
this.allCompletedExercises=allCompletedExercises;
this.onExerciseClickListener=onExerciseClickListener;
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
LayoutInflater LayoutInflater=LayoutInflater.from(parent.getContext());
视图;
如果(viewType==0){
视图=布局更平坦。充气(R.layout.new\u completed\u exercise\u item,parent,false);
返回新的ViewHolderOne(视图,onExerciseClickListener);
}
视图=布局更平坦。充气(R.layout.completed\u exercise\u item,parent,false);
返回新的ViewHolderTwo(视图,一个XerciseClickListener);
}
@凌驾
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){
如果(getItemViewType(位置)==0){
ViewHolderOne ViewHolderOne=(ViewHolderOne)支架;
if(适配器端口==位置){
viewHolderOne.relativeLayout.setBackgroundColor(Color.parseColor(“#567845”);
}
否则{
viewHolderOne.relativeLayout.setBackgroundResource(R.颜色.深灰色);
}
viewHolderOne.textViewExerciseName.setText(String.valueOf(allCompletedExercises.get(position.getChildExerciseName());
viewHolderOne.textViewSetNumber.setText(String.valueOf(viewHolderOne.getAdapterPosition()+1));
viewHolderOne.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position.getTotal_weight_lifted());
viewHolderOne.textViewReps.setText(String.valueOf(allCompletedExercises.get(position.getReps()));
}else if(getItemViewType(position)==1){
ViewHolderTwo ViewHolderTwo=(ViewHolderTwo)支架;
if(适配器端口==位置){
viewHolderTwo.relativeLayout.setBackgroundColor(Color.parseColor(“#567845”);
}否则{
VIEWHOLDERTW.相对年轻人.挫折背景资源(R.颜色.深灰色);
}
viewHolderTwo.textViewSetNumber.setText(String.valueOf(viewHolderTwo.getAdapterPosition()+1));
viewHolderTwo.textViewWeight.setText(String.valueOf(所有已完成的练习)get(位置).getTotal_w
public class CompletedExercisesListAdapter2 extends RecyclerView.Adapter {

    private OnExerciseClickListener onExerciseClickListener;
    private List<Log_Entries> allCompletedExercises = new ArrayList<>();
    public int adapterPos = -1;
    public boolean isSelected = false;

    public CompletedExercisesListAdapter2(ArrayList<Log_Entries> allCompletedExercises, OnExerciseClickListener onExerciseClickListener) {
        this.allCompletedExercises = allCompletedExercises;
        this.onExerciseClickListener = onExerciseClickListener;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view;

        if (viewType == 0) {
            view = layoutInflater.inflate(R.layout.new_completed_exercise_item, parent, false);
            return new ViewHolderOne(view, onExerciseClickListener);
        }

        view = layoutInflater.inflate(R.layout.completed_exercise_item, parent, false);
        return new ViewHolderTwo(view, onExerciseClickListener);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        if (getItemViewType(position) == 0) {
            ViewHolderOne viewHolderOne = (ViewHolderOne) holder;

            if (adapterPos == position) {
                viewHolderOne.relativeLayout.setBackgroundColor(Color.parseColor("#567845"));
            }
            else {
                    viewHolderOne.relativeLayout.setBackgroundResource(R.color.dark_grey);
            }

            viewHolderOne.textViewExerciseName.setText(String.valueOf(allCompletedExercises.get(position).getChildExerciseName()));
            viewHolderOne.textViewSetNumber.setText(String.valueOf(viewHolderOne.getAdapterPosition() + 1));
            viewHolderOne.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position).getTotal_weight_lifted()));
            viewHolderOne.textViewReps.setText(String.valueOf(allCompletedExercises.get(position).getReps()));

        } else if (getItemViewType(position) == 1) {
            ViewHolderTwo viewHolderTwo = (ViewHolderTwo) holder;

            if (adapterPos == position) {
                viewHolderTwo.relativeLayout.setBackgroundColor(Color.parseColor("#567845"));
            } else {
                viewHolderTwo.relativeLayout.setBackgroundResource(R.color.dark_grey);
            }

            viewHolderTwo.textViewSetNumber.setText(String.valueOf(viewHolderTwo.getAdapterPosition() + 1));
            viewHolderTwo.textViewWeight.setText(String.valueOf(allCompletedExercises.get(position).getTotal_weight_lifted()));
            viewHolderTwo.textViewReps.setText(String.valueOf(allCompletedExercises.get(position).getReps()));
        }
    }

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

    @Override
    public int getItemViewType(int position) {

        // if list is sorted chronologically
        if (position == 0) {
            return 0;
        }
        if (allCompletedExercises.get(position).getChildExerciseName().equals(allCompletedExercises.get(position - 1).getChildExerciseName())) {
            return 1;
        } else {
            return 0;
        }
    }

    public class ViewHolderOne extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView textViewExerciseName;
        private TextView textViewSetNumber;
        private TextView textViewWeight;
        private TextView textViewReps;

        OnExerciseClickListener mOnExerciseClickListener;

        private RelativeLayout relativeLayout;

        public ViewHolderOne(@NonNull View itemView, OnExerciseClickListener onExerciseClickListener) {
            super(itemView);

            textViewExerciseName = itemView.findViewById(R.id.textView_ExerciseName3);
            textViewSetNumber = itemView.findViewById(R.id.textView_Set_Number56);
            textViewWeight = itemView.findViewById(R.id.textView_weight78);
            textViewReps = itemView.findViewById(R.id.textView_repss0);
            mOnExerciseClickListener = onExerciseClickListener;
            relativeLayout = (RelativeLayout) itemView.findViewById(R.id.exercise_item_relative);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            onExerciseClickListener.onExerciseClicked(getAdapterPosition());
            if (isSelected) {
                adapterPos = -1;
                isSelected = false;

            } else {
                adapterPos = getAdapterPosition();
                isSelected = true;
            }
            notifyDataSetChanged();
        }
    }

    class ViewHolderTwo extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView textViewSetNumber;
        private TextView textViewWeight;
        private TextView textViewReps;
        OnExerciseClickListener mOnExerciseClickListener;
        private RelativeLayout relativeLayout;

        public ViewHolderTwo(@NonNull View itemView, OnExerciseClickListener onExerciseClickListener) {
            super(itemView);
            textViewSetNumber = itemView.findViewById(R.id.textView_Set_Number);
            textViewWeight = itemView.findViewById(R.id.textView_weight);
            textViewReps = itemView.findViewById(R.id.textView_repss);
            relativeLayout = (RelativeLayout) itemView.findViewById(R.id.exercise_item_rel);
            mOnExerciseClickListener = onExerciseClickListener;
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            onExerciseClickListener.onExerciseClicked(getAdapterPosition());

            if (!isSelected) {
                adapterPos = getAdapterPosition();
                isSelected = true;

            } else {
                adapterPos = -1;
                isSelected = false;
            }
            notifyDataSetChanged();
        }
    }

    public interface OnExerciseClickListener {
        void onExerciseClicked(int position);
    }

    public double getWeight(int position) {
        double weight = allCompletedExercises.get(position).getTotal_weight_lifted();
        return weight;
    }

    public int getReps(int position) {
        int reps = allCompletedExercises.get(position).getReps();
        return reps;
    }
}

                // backup the currently selected position
                int selectedPos = adapter.adapterPos;
                // change the currently selected position to -1
                adapter.adapterPos = -1;
                adapter.isSelected = false;
                adapter.notifyItemChanged(selectedPos);  
        @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {

        int logID = allExercises.get(viewHolder.getAdapterPosition()).getLog_id();
        logViewModel.deleteByID(logID);
        clearBtn.setVisibility(View.VISIBLE);
        saveBtn.setText("Save");//<-- why if no item is selected?

        // backup the currently selected position
        //int selectedPos = adapter.adapterPos;<-- why would you do this, nothing is not shown as selected
        // change the currently selected position to -1
        adapter.adapterPos = -1;
        adapter.notifyDataSetChanged();//now everything will be gray

    }
        @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        int copyOfAdapterPos=adapterPos;
        adapterPos=-1;
        notifyItemChanged(copyOfAdapterPos);
        
        int logID = allExercises.get(viewHolder.getAdapterPosition()).getLog_id();
        logViewModel.deleteByID(logID);
        clearBtn.setVisibility(View.VISIBLE);
        saveBtn.setText("Save");//<-- why if no item is selected?

        adapter.notifyItemRemoved(viewHolder.getAdapterPosition());//now everything will be gray

    }