RecyclerView, изменение фона с разными Viewholder - PullRequest
0 голосов
/ 06 августа 2020

Итак, я следовал этому руководству отсюда:

https://www.freecodecamp.org/news/how-to-implement-swipe-for-options-in-recyclerview/

И все выглядит так, как будто все работает нормально, но у меня есть 1 проблема, о которой я не знаю как исправить.

В одной строке у меня есть два разных держателя, один из которых показывает меню со всеми параметрами, а другой - заголовок (как вы можете видеть на изображении ниже с 1 и 2).

Как видно из кода ниже, цвет строки зависит от того, завершена строка или нет. Если он завершен, он окрашивает весь фон в светло-зеленый цвет. Один из вариантов в меню - отменить (если он был завершен), чтобы он вернулся к цвету по умолчанию. Вот как это выглядит

Вот функция onBindViewholder, как вы можете видеть в начале, я вызываю bindView (position), где он окрашивает фон, но тогда я не знаю как вызвать его снова:

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

    final Task entity = list.get(position);
    if(holder instanceof MyViewHolder){
        ((MyViewHolder)holder).title.setText(entity.getName());
        ((MyViewHolder)holder).bindView(position);
        ((MyViewHolder)holder).container.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                showMenu(position);
                return true;
            }
        });
    }
    if(holder instanceof MenuViewHolder){

        ((MenuViewHolder)holder).complete.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which){
                            case DialogInterface.BUTTON_POSITIVE:
                                Task_Completed(entity.getId(), entity.getPoints());
                                updateTaskList (list);
                                closeMenu();
                                break;

                            case DialogInterface.BUTTON_NEGATIVE:
                                //No button clicked
                                break;
                        }
                    }
                };

                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
                        .setNegativeButton("No", dialogClickListener).show();

            }
        });

        ((MenuViewHolder)holder).undo.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which){
                            case DialogInterface.BUTTON_POSITIVE:
                                entity.setCompleted(0);
                                //((MyViewHolder) holder).container.setBackgroundColor(Color.parseColor("#567845"));
                                Undo_Complete(entity.getId(), entity.getPoints());
                                updateTaskList (list);
                                closeMenu();
                                break;

                            case DialogInterface.BUTTON_NEGATIVE:
                                //No button clicked
                                break;
                        }
                    }
                };

                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
                        .setNegativeButton("No", dialogClickListener).show();

            }
        });
        ((MenuViewHolder)holder).delete.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which){
                            case DialogInterface.BUTTON_POSITIVE:
                                delete_task(entity.getId());
                                list.remove(entity);
                                updateTaskList (list);
                                closeMenu();
                                break;

                            case DialogInterface.BUTTON_NEGATIVE:

                                break;
                        }
                    }
                };

                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
                        .setNegativeButton("No", dialogClickListener).show();

            }
        });
        
    }

}

Вот класс держателей с методом bindView:

public  class MyViewHolder extends RecyclerView.ViewHolder {
    TextView title;
    ConstraintLayout container;
     LinearLayout background;

    public MyViewHolder(View itemView) {
        super(itemView);
        title = itemView.findViewById(R.id.title);
        container = itemView.findViewById(R.id.container);
       background = (LinearLayout) itemView.findViewById((R.id.linearLayout3));

    }

    public  void bindView(int pos) {
        int value = list.get(pos).getCompleted();
        if(value == 1 ) {
            container.setBackgroundColor (ContextCompat.getColor(context, R.color.light_green));
        }
    }
}
public class MenuViewHolder extends RecyclerView.ViewHolder{
     ImageView   complete, delete, undo;
   // ConstraintLayout container;
    public MenuViewHolder(View view){
        super(view);
        complete = view.findViewById(R.id.Complete);
        undo = view.findViewById(R.id.Undo);
      //  container = itemView.findViewById(R.id.container);
        delete = view.findViewById(R.id.Delete);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...