Java 如何在适配器类中初始化RecyclerView
我有一个片段,在这个片段中,所有订单都列在回收视图中。如果用户单击订单或一行RecyclerView,将打开一个弹出窗口。此弹出窗口详细显示所有订单。这幅画应该使文字清晰。弹出窗口一直工作到现在。不幸的是,没有填充第二个RecyclerView 这是一个典型的NullPointerException。因此,我的代码中不存在RecyclerView的布局。现在我的问题是如何正确初始化第二个RecyclerView?我先谢谢你 这是我的适配器类和第二个RecyclerViewJava 如何在适配器类中初始化RecyclerView,java,android,android-studio,android-recyclerview,Java,Android,Android Studio,Android Recyclerview,我有一个片段,在这个片段中,所有订单都列在回收视图中。如果用户单击订单或一行RecyclerView,将打开一个弹出窗口。此弹出窗口详细显示所有订单。这幅画应该使文字清晰。弹出窗口一直工作到现在。不幸的是,没有填充第二个RecyclerView 这是一个典型的NullPointerException。因此,我的代码中不存在RecyclerView的布局。现在我的问题是如何正确初始化第二个RecyclerView?我先谢谢你 这是我的适配器类和第二个RecyclerView public clas
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);
}
}
}
我认为问题在于
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);
谢谢你的评论!不幸的是,没有比这更平坦的了;是的,当您在适配器中时,使用您的上下文将LayoutFlater.fromcontext充气;现在答案更新了,你能具体说明一下吗?太好了!!非常感谢你!唯一的问题是ReyclerView没有正确填写。因此,图中未显示:E/RecyclerView:未连接适配器;跳过布局