0

I have a problem when working with nested RecyclerView in RecyclerView. In my parent RecyclerView I am displaying rows of items. These rows have rows of scanned goods. If I want to display the scanned rows, I click on the parent Recyclerview and it expands. When I tap on the child RecyclerView, it should show edit/delete buttons instead of an error message. Notify works until I shrink the parent RecyclerView(tap it again) and expand it again. At the moment notify does not trigger onBindViewHolder.

Anyone know what to do?

Parent Fragment

public class ShowCdlFragment extends Fragment {

private FragmentShowCdlBinding binding;
private Resources res;
private SessionManager session;
private Bundle params;

private F1002dlh f1002dlh;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    this.binding = FragmentShowCdlBinding.inflate(getLayoutInflater());

    this.session = new SessionManager(getContext());

    this.res = getResources();

    this.session.checkLogin(getActivity());

    // Inflate the layout for this fragment
    return this.binding.getRoot();
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    this.params = getArguments();
    this.f1002dlh = this.params.getParcelable("F1002DLH");

    RecyclerView rvMenu = (RecyclerView) binding.showCdlRecyclerView;

    ArrayList<F1002dlr> f1002dlrArrayList = this.f1002dlh.getF1002dlh_f1002dlrs();
    CdlAdapter cdlAdapter = new CdlAdapter(f1002dlrArrayList, getContext());

    rvMenu.setAdapter(cdlAdapter);
    rvMenu.setLayoutManager(new LinearLayoutManager(this.getContext()));
}

}

Parent Adapter

public class CdlAdapter extends RecyclerView.Adapter<CdlAdapter.ViewHolder> {

private List<F1002dlr> f1002dlrList;
private Context context;

private Integer expandedPosition = -1;

private RecyclerView.RecycledViewPool recycledViewPool;
private RecyclerView cdlItem_sub_recyclerView;

public CdlAdapter(List<F1002dlr> f1002dlrList, Context context) {
    this.f1002dlrList = f1002dlrList;
    this.context = context;

    this.recycledViewPool = new RecyclerView.RecycledViewPool();
}

@NonNull
@Override
public CdlAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);

    View cdlView = inflater.inflate(R.layout.cdl_item, parent, false);

    return new ViewHolder(cdlView);
}


@Override
public void onBindViewHolder(@NonNull CdlAdapter.ViewHolder holder, int position) {
    F1002dlr f1002dlr = f1002dlrList.get(position);

    ImageView f1002dlr_status_imageView = holder.f1002dlr_status_imageView;
    TextView f1002dlr_vpd_textView = holder.f1002dlr_vpd_textView;
    TextView f1002dlr_radek_textView = holder.f1002dlr_radek_textView;
    TextView f1002dlr_komodita_textView = holder.f1002dlr_komodita_textView;
    TextView f1002dlr_xvyr_textView = holder.f1002dlr_xvyr_textView;
    TextView f1002dlr_jakost_textView = holder.f1002dlr_jakost_textView;
    TextView f1002dlr_mnozstvi_textView = holder.f1002dlr_mnozstvi_textView;
    TextView f1002dlr_vady_textView = holder.f1002dlr_vady_textView;
    TextView f1002dlr_mj_textView = holder.f1002dlr_mj_textView;
    TextView f1002dlr_hodnota_textView = holder.f1002dlr_hodnota_textView;
    TextView f1002dlr_pc_textView = holder.f1002dlr_pc_textView;

    f1002dlr_status_imageView.setImageResource(getImageId(f1002dlr.getStatus()));
    f1002dlr_vpd_textView.setText(f1002dlr.getF1002dlr_vpd().toString());
    f1002dlr_radek_textView.setText(f1002dlr.getF1002dlr_radek().toString());
    f1002dlr_komodita_textView.setText(f1002dlr.getF1002dlr_komodita());
    f1002dlr_xvyr_textView.setText(f1002dlr.getF1002dlr_xvyr().toString());
    f1002dlr_jakost_textView.setText(f1002dlr.getF1002dlr_jakost());
    f1002dlr_mnozstvi_textView.setText(String.format("%.2f", f1002dlr.getF1002dlr_mnozstvi()));
    f1002dlr_vady_textView.setText(f1002dlr.getF1002dlr_vady().toString());
    f1002dlr_mj_textView.setText(f1002dlr.getF1002dlr_mj());
    f1002dlr_hodnota_textView.setText(String.format("%.2f", f1002dlr.getHodnota()));
    f1002dlr_pc_textView.setText(String.format("%.2f", f1002dlr.getF1002dlr_pc()));

    Double mnozstvi = 0.00;
    Integer vady = 0;

    for (F1002ck_data f1002ck_data : f1002dlr.getF1002dlr_f1002ck_datas()) {
        mnozstvi += f1002ck_data.getF1002ck_data_mnozstvi_mj1();
        vady += f1002ck_data.getF1002ck_data_vady();
    }

    TextView nasnimane_mnozstvi_textView = holder.nasnimane_mnozstvi_textView;
    TextView nasnimane_vady_textView = holder.nasnimane_vady_textView;

    nasnimane_mnozstvi_textView.setText(String.format("%.2f", mnozstvi));
    nasnimane_vady_textView.setText(vady.toString());

    if (expandedPosition == -1) {
        f1002dlr.setExpanded(false);
    }

    Boolean isExpanded = f1002dlr.getExpanded();

    if (isExpanded) {
        holder.expandable_constraintLayout.setVisibility(View.VISIBLE);
    } else {
        holder.expandable_constraintLayout.setVisibility(View.GONE);
    }

    cdlItem_sub_recyclerView = holder.cdlItem_sub_recyclerView;

    LinearLayoutManager layoutManager = new LinearLayoutManager(cdlItem_sub_recyclerView.getContext(), LinearLayoutManager.VERTICAL, false);

    cdlItem_sub_recyclerView.setLayoutManager(layoutManager);
    cdlItem_sub_recyclerView.setAdapter(new CdlSubAdapter(f1002dlr.getF1002dlr_f1002ck_datas(), context));
    cdlItem_sub_recyclerView.setRecycledViewPool(recycledViewPool);

}

private void updateF1002dlh() {
    if (context instanceof AdapterCallInterface) {
        ((AdapterCallInterface) context).setDocumentData(f1002dlrList);
    }
}

private int getImageId(int status) {
    Integer imageId = 0;

    switch (status) {
        case -2:
            imageId = R.drawable.orange_status;
            break;
        case -1:
            imageId = R.drawable.red_status;
            break;
        case 0:
            imageId = R.drawable.grey_status;
            break;
        case 1:
            imageId = R.drawable.green_status;
            break;
    }

    return imageId;
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    private ImageView f1002dlr_status_imageView;
    private TextView f1002dlr_vpd_textView;
    private TextView f1002dlr_radek_textView;
    private TextView f1002dlr_komodita_textView;
    private TextView f1002dlr_xvyr_textView;
    private TextView f1002dlr_jakost_textView;
    private TextView f1002dlr_mnozstvi_textView;
    private TextView f1002dlr_vady_textView;
    private TextView f1002dlr_mj_textView;
    private TextView f1002dlr_hodnota_textView;
    private TextView f1002dlr_pc_textView;

    private TextView nasnimane_mnozstvi_textView;
    private TextView nasnimane_vady_textView;

    private LinearLayout linearLayout;

    private ConstraintLayout main_constrainLayout;
    private ConstraintLayout expandable_constraintLayout;
    private ConstraintLayout second_constraintLayout;

    private RecyclerView cdlItem_sub_recyclerView;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        initAdapterViews();

        second_constraintLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                F1002dlr f1002dlr;

                if (expandedPosition >= 0 && expandedPosition != getAdapterPosition()) {
                    int prev = expandedPosition;
                    f1002dlr = f1002dlrList.get(prev);
                    if (f1002dlr.getExpanded()) {
                        f1002dlr.setExpanded(!f1002dlr.getExpanded());

                        notifyItemChanged(prev);
                    }
                }
                expandedPosition = getAdapterPosition();
                f1002dlr = f1002dlrList.get(expandedPosition);

                f1002dlr.setExpanded(!f1002dlr.getExpanded());

                updateF1002dlh();
                
                notifyItemChanged(expandedPosition);
            }
        });
    }

    private void initAdapterViews() {
        f1002dlr_status_imageView = (ImageView) itemView.findViewById(R.id.cdlItem_status_imageView);
        f1002dlr_vpd_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_vpd_textView);
        f1002dlr_radek_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_radek_textView);
        f1002dlr_komodita_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_komodita_textView);
        f1002dlr_xvyr_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_xvyr_textView);
        f1002dlr_jakost_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_jakost_textView);
        f1002dlr_mnozstvi_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_mnozstvi_textView);
        f1002dlr_vady_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_vady_textView);
        f1002dlr_mj_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_mj_textView);
        f1002dlr_hodnota_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_hodnota_textView);
        f1002dlr_pc_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_pc_textView);

        nasnimane_mnozstvi_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_nasnimane_mnozstvi_textView);
        nasnimane_vady_textView = (TextView) itemView.findViewById(R.id.cdlItem_value_nasnimane_vady_textView);

        linearLayout = (LinearLayout) itemView.findViewById(R.id.menuItem_linearLayout);

        main_constrainLayout = (ConstraintLayout) itemView.findViewById(R.id.cdlItem_main_constraintLayout);
        expandable_constraintLayout = (ConstraintLayout) itemView.findViewById(R.id.cdlItem_expandable_constraintLayout);
        second_constraintLayout = (ConstraintLayout) itemView.findViewById(R.id.cdlItem_second_constraintLayout);

        cdlItem_sub_recyclerView = (RecyclerView) itemView.findViewById(R.id.cdlItem_sub_recyclerView);
    }

}

}

Child Adapter

public class CdlSubAdapter extends RecyclerView.Adapter<CdlSubAdapter.ViewHolder> {

private List<F1002ck_data> f1002ck_dataList;
private Context context;

private Integer showingButtonsPosition = -1;

public CdlSubAdapter(List<F1002ck_data> f1002ck_dataList, Context context) {
    this.context = context;
    this.f1002ck_dataList = f1002ck_dataList;
}

@NonNull
@Override
public CdlSubAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);

    View cdSublView = inflater.inflate(R.layout.cdl_sub_item, parent, false);

    return new ViewHolder(cdSublView);
}

@Override
public void onBindViewHolder(@NonNull CdlSubAdapter.ViewHolder holder, int position) {
    F1002ck_data f1002ck_data = f1002ck_dataList.get(position);

    ImageView f1002ck_data_status_imageView = holder.f1002ck_data_status_imageView;

    if (!Objects.equals(f1002ck_data.getF1002ck_data_indikace(), Funkce.INDIKACE_OK)) {
        f1002ck_data.setStatus(Funkce.STATUS_WRONG);
    }

    f1002ck_data_status_imageView.setImageResource(getImageId(f1002ck_data.getStatus()));

    ConstraintLayout cdlSubItem_chyba_constrainLayout = holder.cdlSubItem_chyba_constrainLayout;

    TextView nazev_zbozi = holder.nazev_zbozi;
    TextView f1002ck_data_id_zbozi = holder.f1002ck_data_id_zbozi;
    TextView f1002ck_data_cislodokl = holder.f1002ck_data_cislodokl;
    TextView f1002ck_data_mnozstvi_mj1 = holder.f1002ck_data_mnozstvi_mj1;
    TextView f1002ck_data_vady = holder.f1002ck_data_vady;
    TextView chyba = holder.chyba;

    nazev_zbozi.setText(f1002ck_data.getNazevZbozi());
    f1002ck_data_id_zbozi.setText(f1002ck_data.getF1002ck_data_id_f10zbozi().toString());
    f1002ck_data_cislodokl.setText(f1002ck_data.getF1002ck_data_cislodokl().toString());
    f1002ck_data_mnozstvi_mj1.setText(String.format("%.2f", f1002ck_data.getF1002ck_data_mnozstvi_mj1()));
    f1002ck_data_vady.setText(f1002ck_data.getF1002ck_data_vady().toString());
    chyba.setText(f1002ck_data.getF1002ck_data_chyba());

    LinearLayout buttons_linearLayout = holder.buttons_linearLayout;

    if (showingButtonsPosition == -1) {
        f1002ck_data.setShowButtons((short) View.GONE);
    }

    if (f1002ck_data.getShowButtons() == View.VISIBLE) {
        cdlSubItem_chyba_constrainLayout.setVisibility(View.GONE);
        buttons_linearLayout.setVisibility((int) f1002ck_data.getShowButtons());
    } else {
        cdlSubItem_chyba_constrainLayout.setVisibility(View.VISIBLE);
        buttons_linearLayout.setVisibility((int) f1002ck_data.getShowButtons());
    }


}

private int getImageId(int status) {
    Integer imageId = 0;

    switch (status) {
        case -2:
            imageId = R.drawable.orange_status;
            break;
        case -1:
            imageId = R.drawable.red_status;
            break;
        case 0:
            imageId = R.drawable.grey_status;
            break;
        case 1:
            imageId = R.drawable.green_status;
            break;
    }

    return imageId;
}

private Integer sortElementsInList(F1002ck_data f1002ck_data) {
    Collections.sort(f1002ck_dataList, new Comparator<F1002ck_data>() {
        @Override
        public int compare(F1002ck_data t1, F1002ck_data t2) {
            if (t1.getStatus().compareTo(t2.getStatus()) == 0) {
                return t1.getF1002ck_data_id_f10zbozi().compareTo(t2.getF1002ck_data_id_f10zbozi());
            }
            return t1.getStatus().compareTo(t2.getStatus());
        }
    });

    for (int i = 0; i < f1002ck_dataList.size(); i++) {
        if (f1002ck_data.equals(f1002ck_dataList.get(i))) {
            return i;
        }
    }

    return 0;
}

private void updateF1002dlh() {
    if (context instanceof AdapterCallInterface) {
        ((AdapterCallInterface) context).setF1002ck_data(f1002ck_dataList);
    }
}

private void removeRowF1002ck_data(F1002ck_data f1002ck_data) {
    if (context instanceof AdapterCallInterface) {
        ((AdapterCallInterface) context).removeRowF1002ck_data(f1002ck_data);
    }
}

@Override
public void onViewAttachedToWindow(@NonNull ViewHolder holder) {
    super.onViewAttachedToWindow(holder);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull List<Object> payloads) {
    super.onBindViewHolder(holder, position, payloads);
}


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


public class ViewHolder extends RecyclerView.ViewHolder {

    private LinearLayout linearLayout;

    private ImageView f1002ck_data_status_imageView;

    private ConstraintLayout cdlSubItem_chyba_constrainLayout;

    private TextView nazev_zbozi;
    private TextView f1002ck_data_id_zbozi;
    private TextView f1002ck_data_cislodokl;
    private TextView f1002ck_data_mnozstvi_mj1;
    private TextView f1002ck_data_vady;
    private TextView chyba;

    private LinearLayout buttons_linearLayout;

    private CardView edit_imageButton;
    private CardView remove_imageButton;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        initAdapterViews();

        linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                F1002ck_data f1002ck_data = null;

                if (showingButtonsPosition >= 0 && showingButtonsPosition != getAdapterPosition()) {
                    int prev = showingButtonsPosition;
                    f1002ck_data = f1002ck_dataList.get(prev);
                    if (f1002ck_data.getShowButtons() == (short) View.VISIBLE) {
                        f1002ck_data.setShowButtons((short) View.GONE);
                        notifyItemChanged(prev);
                    }
                }
                showingButtonsPosition = getAdapterPosition();
                if (!f1002ck_dataList.isEmpty()) {
                    f1002ck_data = f1002ck_dataList.get(showingButtonsPosition);
                }
                if (f1002ck_data != null) {
                    if (f1002ck_data.getShowButtons() == (short) View.VISIBLE) {
                        f1002ck_data.setShowButtons((short) View.GONE);
                        //cdlSubItem_chyba_constrainLayout.setVisibility(View.GONE);
                        //buttons_linearLayout.setVisibility((int) f1002ck_data.getShowButtons());
                    } else {
                        f1002ck_data.setShowButtons((short) View.VISIBLE);
                        //cdlSubItem_chyba_constrainLayout.setVisibility(View.VISIBLE);
                        //buttons_linearLayout.setVisibility((int) f1002ck_data.getShowButtons());
                    }
                }

                notifyItemChanged(showingButtonsPosition);
            }
        });

        edit_imageButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                int position = getAdapterPosition();

                F1002ck_data f1002ck_data = f1002ck_dataList.get(position);

                f1002ck_data.setStatus(Funkce.STATUS_OK);

                f1002ck_data_status_imageView.setImageResource(getImageId(f1002ck_data.getStatus()));

                showingButtonsPosition = sortElementsInList(f1002ck_data);
                updateF1002dlh();
                notifyDataSetChanged();
            }
        });

        remove_imageButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                int position = getAdapterPosition();

                F1002ck_data f1002ck_data = f1002ck_dataList.get(position);
                f1002ck_dataList.remove(f1002ck_data);

                removeRowF1002ck_data(f1002ck_data);
                notifyItemRemoved(position);
            }
        });

    }


    private void initAdapterViews() {
        linearLayout = (LinearLayout) itemView.findViewById(R.id.cdlSubItem_linearLayout);

        f1002ck_data_status_imageView = (ImageView) itemView.findViewById(R.id.cdlSubItem_status_imageView);

        cdlSubItem_chyba_constrainLayout = (ConstraintLayout) itemView.findViewById(R.id.cdlSubItem_chyba_constraintLayout);

        nazev_zbozi = (TextView) itemView.findViewById(R.id.cdlSubItem_value_nazev_zbozi_textView);
        f1002ck_data_id_zbozi = (TextView) itemView.findViewById(R.id.cdlSubItem_value_id_f10zbozi_textView);
        f1002ck_data_cislodokl = (TextView) itemView.findViewById(R.id.cdlSubItem_value_cislodokl_textView);
        f1002ck_data_mnozstvi_mj1 = (TextView) itemView.findViewById(R.id.cdlSubItem_value_mnozstvi_mj1_textView);
        f1002ck_data_vady = (TextView) itemView.findViewById(R.id.cdlSubItem_value_vady_textView);
        chyba = (TextView) itemView.findViewById(R.id.cdlSubItem_value_chyba_textView);

        buttons_linearLayout = (LinearLayout) itemView.findViewById(R.id.cdlSubItem_buttons_linearLayout);

        edit_imageButton = (CardView) itemView.findViewById(R.id.cdlSubItem_edit_cardView);
        remove_imageButton = (CardView) itemView.findViewById(R.id.cdlSubItem_remove_cardView);
    }

}

}

Updated

In the course of this question, I made several changes inside the child adapter.

Thedarlin
  • 1
  • 2

0 Answers0