Java rView.ViewHolder实现View.OnClickListener{ 私有TextView textViewSetNumber; 私有文本视图文本视图权重; 私有文本视图文本视图代表; OnExerciseClickListener mOnExerciseClickListener; 私人亲戚; public ViewHolderTwo(@NonNull View itemView,OnExerciseClickListener OnExerciseClickListener){ 超级(项目视图); textViewSetNumber=itemView.findViewById(R.id.textView\u Set\u Number); textViewWeight=itemView.findViewById(R.id.textView\u-weight); textViewReps=itemView.findViewById(R.id.textView\u repss); relativeLayout=(relativeLayout)itemView.findViewById(R.id.exercise\u item\u rel); mOnExerciseClickListener=onExerciseClickListener; setOnClickListener(这个); } @凌驾 公共void onClick(视图v){ onExerciseClickListener.onExerciseClicked(getAdapterPosition()); 如果(!标志){ adapterPos=getAdapterPosition(); flag=true; }否则{ adapterPos=-1; flag=false; } notifyDataSetChanged(); } } 公共接口OnExerciseClickListener{ void onexercise(int位置); } 公共双getWeight(内部位置){ 双倍重量=所有完成的练习。获取(位置)。获取总重量提升(); 返回重量; } 公共int getReps(int职位){ int reps=allCompletedExercises.get(position.getReps(); 返回代表; } }
我强烈建议使用Groupie之类的库来抽象出RecyclerView的复杂状态管理。否则,您会发现这种命令式样式很快变得无法维护。未来是声明式UI(撰写等)。这样,跟踪项目比跟踪位置容易得多 很难遵循您的代码(您应该使用描述性名称,比如Java rView.ViewHolder实现View.OnClickListener{ 私有TextView textViewSetNumber; 私有文本视图文本视图权重; 私有文本视图文本视图代表; OnExerciseClickListener mOnExerciseClickListener; 私人亲戚; public ViewHolderTwo(@NonNull View itemView,OnExerciseClickListener OnExerciseClickListener){ 超级(项目视图); textViewSetNumber=itemView.findViewById(R.id.textView\u Set\u Number); textViewWeight=itemView.findViewById(R.id.textView\u-weight); textViewReps=itemView.findViewById(R.id.textView\u repss); relativeLayout=(relativeLayout)itemView.findViewById(R.id.exercise\u item\u rel); mOnExerciseClickListener=onExerciseClickListener; setOnClickListener(这个); } @凌驾 公共void onClick(视图v){ onExerciseClickListener.onExerciseClicked(getAdapterPosition()); 如果(!标志){ adapterPos=getAdapterPosition(); flag=true; }否则{ adapterPos=-1; flag=false; } notifyDataSetChanged(); } } 公共接口OnExerciseClickListener{ void onexercise(int位置); } 公共双getWeight(内部位置){ 双倍重量=所有完成的练习。获取(位置)。获取总重量提升(); 返回重量; } 公共int getReps(int职位){ int reps=allCompletedExercises.get(position.getReps(); 返回代表; } },java,android,android-recyclerview,android-swipe,Java,Android,Android Recyclerview,Android Swipe,我强烈建议使用Groupie之类的库来抽象出RecyclerView的复杂状态管理。否则,您会发现这种命令式样式很快变得无法维护。未来是声明式UI(撰写等)。这样,跟踪项目比跟踪位置容易得多 很难遵循您的代码(您应该使用描述性名称,比如isSelected,而不是flag)。但是,我认为您的问题在于绑定函数在这里没有返回false: if(adapterPos==位置) 在你刷卡之后。使用断点找出原因 @Override public void onExerciseClicked(int
isSelected
,而不是flag
)。但是,我认为您的问题在于绑定函数在这里没有返回false:
if(adapterPos==位置)
在你刷卡之后。使用断点找出原因
@Override
public void onExerciseClicked(int position) {
if (recyclerItemClicked == false) {
saveBtn.setText("Update");
clearBtn.setVisibility(View.GONE);
recyclerItemClicked = true;
double selectedWeight = adapter.getWeight(position);
String selectedWeightString = Double.toString(selectedWeight);
editTextWeight.setText(selectedWeightString);
int selectedReps = adapter.getReps(position);
String selectedRepsString = Integer.toString(selectedReps);
editTextReps.setText(selectedRepsString);
} else {
clearBtn.setVisibility(View.VISIBLE);
saveBtn.setText("Save");
recyclerItemClicked = false;
}
}
ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@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");
adapter.notifyDataSetChanged();
}
};
public class CompletedExercisesListAdapter2 extends RecyclerView.Adapter {
private OnExerciseClickListener onExerciseClickListener;
private List<Log_Entries> allCompletedExercises = new ArrayList<>();
private int adapterPos = -1;
public boolean flag = 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(allCompletedExercises.get(position).getSet_number()));
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(allCompletedExercises.get(position).getSet_number()));
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;
}
}
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 (flag) {
adapterPos = -1;
flag = false;
} else {
adapterPos = getAdapterPosition();
flag = 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 (!flag) {
adapterPos = getAdapterPosition();
flag = true;
} else {
adapterPos = -1;
flag = 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;
}
}