[英]Removing item from list when clicking on an item in recyclerview
I'm building a project app where you can add users to a task.我正在构建一个项目应用程序,您可以在其中将用户添加到任务中。 I have a recycler view with all my users.我的所有用户都有一个回收站视图。 When you tap on a user that user is added to an array list, it all works fine.当您点击某个用户时,该用户已添加到数组列表中,一切正常。 The problem I got is that you can't deselect a user.我遇到的问题是您无法取消选择用户。 When tapping on a user that already has been selected that user should be removed from the array list.当点击一个已经被选中的用户时,该用户应该从数组列表中删除。 How do you do this?你怎么做到这一点?
My Adapter:我的适配器:
public class AddPeopleToTaskAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {
public ArrayList<String> peopleToAddToTask = new ArrayList<String>();
public List<PeopleInProject> peopleInProjects;
public Context context;
public AddPeopleToTaskAdapter(Context context, List<PeopleInProject> peopleInProjects) {
this.peopleInProjects = peopleInProjects;
this.context = context;
}
@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.add_people_to_task_recyclerview, viewGroup, false);
return new RecyclerViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final RecyclerViewHolder viewHolder, final int i) {
final PeopleInProject peopleToAdd = peopleInProjects.get(i);
viewHolder.addedIcon.setVisibility(View.INVISIBLE);
viewHolder.nameLbl.setText(peopleToAdd.getUserName());
viewHolder.setItemClickListenerPeopleToAdd(new ItemClickListenerPeopleToAdd() {
@Override
public void onClick(View view, int position) {
Toast.makeText(context, "You added " + peopleToAdd.getEmail(), Toast.LENGTH_SHORT).show();
peopleToAddToTask.add(peopleToAdd.getUserId().toString());
viewHolder.addedIcon.setVisibility(View.VISIBLE);
viewHolder.addIcon.setVisibility(View.INVISIBLE);
if (peopleToAddToTask.contains(peopleToAdd.getUserId().toString())) {
}
}
});
}
@Override
public int getItemCount() {
return peopleInProjects.size();
}
I also shows an image when a user has been added (addedIcon).我还显示了添加用户时的图像(已添加图标)。 Which shows correctly.哪个显示正确。 When you deselect a user that image should be replaced with addIcon.当您取消选择用户时,该图像应替换为 addIcon。
I tried this but it didn't work.我试过这个,但没有用。
@Override
public void onBindViewHolder(@NonNull final RecyclerViewHolder viewHolder, final int i) {
final PeopleInProject peopleToAdd = peopleInProjects.get(i);
viewHolder.addedIcon.setVisibility(View.INVISIBLE);
viewHolder.nameLbl.setText(peopleToAdd.getUserName());
viewHolder.setItemClickListenerPeopleToAdd(new ItemClickListenerPeopleToAdd() {
@Override
public void onClick(View view, int position) {
Toast.makeText(context, "You added " + peopleToAdd.getEmail(), Toast.LENGTH_SHORT).show();
peopleToAddToTask.add(peopleToAdd.getUserId().toString());
viewHolder.addedIcon.setVisibility(View.VISIBLE);
viewHolder.addIcon.setVisibility(View.INVISIBLE);
if (peopleToAddToTask.contains(peopleToAdd.getUserId().toString())) {
peopleToAddToTask.remove(i);
viewHolder.addedIcon.setVisibility(View.INVISIBLE);
viewHolder.addIcon.setVisibility(View.VISIBLE);
}
}
});
}
I appreciate all help.我感谢所有帮助。 Tnx!天啊!
I think you should first go through your array and check for containing the user我认为您应该首先浏览您的数组并检查是否包含用户
for(int i = 0; i < peopleToAddToTask.size(); i++){
if (peopleToAddToTask.contains(peopleToAdd.getUserId().toString())) {
peopleToAddToTask.remove(i);
viewHolder.addedIcon.setVisibility(View.INVISIBLE);
viewHolder.addIcon.setVisibility(View.VISIBLE);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.