简体   繁体   English

单击回收站视图中的项目时从列表中删除项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM