Как инициализировать RecyclerView в классе адаптера - PullRequest
0 голосов
/ 21 июня 2020

У меня есть фрагмент, и в этом фрагменте все заказы перечислены в RecyclerView. Если пользователь нажимает на заказ или строку в RecyclerView, открывается всплывающее окно. В этом всплывающем окне подробно показаны все заказы. Картинка должна прояснять текст. PopUp работал до сих пор. К сожалению, не заполняется второй RecyclerView.

Это класс c NullPointerException. Таким образом, макет RecyclerView не «существует» в моем коде. Теперь мой вопрос: как мне правильно инициализировать второй RecyclerView? Заранее благодарю!

введите описание изображения здесь

Это мой класс адаптера со вторым RecyclerView

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

    ArrayList<Bestellung> bestellung;
    Context mContext;
    Dialog epicDialog;
    UserBestellAdapter.ViewHolder viewHolder;
    ArrayList<ModelOverviewOrder> orderList;
    RecyclerView recyclerView;

    public UserBestellAdapter(Context context, ArrayList<Bestellung> list) {
        mContext = context;
        bestellung = list;
        epicDialog = new Dialog(mContext);
    }

    @NonNull
    @Override
    public UserBestellAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_bestell, parent, false);
         viewHolder = new UserBestellAdapter.ViewHolder(view);


        return viewHolder;
    }
    @NonNull

    @Override
    public void onBindViewHolder(@NonNull UserBestellAdapter.ViewHolder holder, final int position) {
      //Gesamtpreis:   holder.item_betrag.setText(String.valueOf(bestellung.get(position).getBetrag()));
      // Datum:   holder.item_datum.setText(bestellung.get(position).getDatum());
        holder.item_items.setText(bestellung.get(position).getProdukte());
        //holder.item_code.setText(bestellung.get(position).getBestellnummer());
        String bestellid =bestellung.get(position).getBestellnummer() + "";
        holder.item_code.setText(bestellid);
        holder.item_betrag.setText(Double.toString(bestellung.get(position).getSumme()));
        holder.item_datum.setText(bestellung.get(position).getDatum());


        // POPUP OPEN WORKS BUT NOT THE FILLING OF THE RecyclerView 
        holder.layout_user_bestellung.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                recyclerView = view.findViewById(R.id.recyclerview_order_scroll);

                orderList = new ArrayList<>();
                orderList.add(new ModelOverviewOrder("Toast", "5", "6.0"));


                LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
                RecyclerView.LayoutManager rvLayoutManager = layoutManager;
                recyclerView.setLayoutManager(rvLayoutManager);

                OrderOverviewAdapter adapter = new OrderOverviewAdapter(mContext, orderList);
                recyclerView.setAdapter(adapter);


                TextView order_overview_number = view.findViewById(R.id.order_overview_number);
                System.out.println("------>" + order_overview_number);
                epicDialog.setContentView(R.layout.user_popup_order_overview);
                epicDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                Button btn_order_overview_finish = (Button) epicDialog.findViewById(R.id.btn_order_overview_finish);
                //System.out.println(bestellung.get(position).getBestellnummer());
                getBestellung(bestellung.get(position).getBestellnummer());
                btn_order_overview_finish.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        epicDialog.dismiss();
                    }

                });
                epicDialog.show();


            }
        });


    }

    public void getBestellung(final int bestellnr) {
        final FirebaseFirestore db = FirebaseFirestore.getInstance();
        final FirebaseAuth mAuth = FirebaseAuth.getInstance();

        db.collection("users")
                .document(mAuth.getCurrentUser().getUid())
                .collection("bestellungen").get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {

                                 if(bestellnr == Integer.parseInt((String) document.get("bestellnummer").toString())) {
                                    getGesamtbestellung(bestellnr, (String) document.getId());
                                 }
                            }
                            //System.out.println(list.get(0).toString());

                            //Toast.makeText(getActivity(), "Bestellungen wurden gefunden!", Toast.LENGTH_SHORT).show();
                        } else {
                            //Toast.makeText(getActivity(), "Es ist ein Fehler beim Abrufen der Bestellungen aufgetreten: " + task.getException().toString(), Toast.LENGTH_SHORT).show();
                            //Log.w(TAG, "Error getting documents.", task.getException());
                        }
                    }
                });
    }

    public void getGesamtbestellung(int bestellnr, String documentId) {
        final FirebaseFirestore db = FirebaseFirestore.getInstance();
        final FirebaseAuth mAuth = FirebaseAuth.getInstance();

        db.collection("users").document(mAuth.getCurrentUser().getUid()).collection("bestellungen").document(documentId).collection("gesamtbestellungen").whereEqualTo("bestellnummer",bestellnr)
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            ArrayList<Bestellung> list = new ArrayList<>();
                            //Toast.makeText(getActivity(), "Bestellungen wurden gefunden!", Toast.LENGTH_SHORT).show();
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                //Log.d(TAG, document.getId() + " => " + document.getData());
                                System.out.println(document.getId() + " => " + document.getData());
                                Bestellung best = document.toObject(Bestellung.class);
                                list.add(best);
                            }
                            //Toast.makeText(getActivity(), "Bestellungen wurden gefunden!", Toast.LENGTH_SHORT).show();
                        } else {
                            //Toast.makeText(getActivity(), "Es ist ein Fehler beim Abrufen der Bestellungen aufgetreten: " + task.getException().toString(), Toast.LENGTH_SHORT).show();
                            //Log.w(TAG, "Error getting documents.", task.getException());
                        }
                    }
                });
    }





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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private TextView item_items, item_betrag, item_datum, item_code;
        private ConstraintLayout layout_user_bestellung;


        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            item_items = itemView.findViewById(R.id.items);
            item_betrag = itemView.findViewById(R.id.betrag);
            item_datum = itemView.findViewById(R.id.datum);
            item_code = itemView.findViewById(R.id.code);
            layout_user_bestellung = itemView.findViewById(R.id.layout_user_bestellung);
        }
    }
}

1 Ответ

2 голосов
/ 21 июня 2020

Я думаю, что проблема в

  recyclerView = view.findViewById(R.id.recyclerview_order_scroll);

Вы должны использовать объект диалогового окна для инициализации RecyclerView. Но вы используете представление с щелчком.

Попробуйте это, увеличьте вид вашего диалогового окна следующим образом

LayoutInflater inflater = LayoutInflater.from(mContext); //current Context object
View dialogView = (View) inflater.inflate(R.layout.user_popup_order_overview, null);

epicDialog.setContentView(dialogView);

recyclerView  = (RecyclerView) dialogView.findViewById(R.id.recyclerview_order_scroll);
...