java - 如何在 RecyclerView 适配器类中初始化正确的 TextView?
问题描述
我想设置自定义构建弹出窗口的文本。我一想设置文字,经典NullPointerException
就来了。如何访问自定义弹出窗口中的文本字段?如何更改 TextView 的文本order_overview_number.setText(...)
。我该如何正确初始化它? TextView order_overview_number = epicDialog.findViewById(R.id.order_overview_number);
不幸的是,这是错误的......
public class UserBestellAdapter extends RecyclerView.Adapter<UserBestellAdapter.ViewHolder> {
ArrayList<Bestellung> bestellung;
Context mContext;
Dialog epicDialog;
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);
UserBestellAdapter.ViewHolder 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());
holder.layout_user_bestellung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView order_overview_number = epicDialog.findViewById(R.id.order_overview_number);
//order_overview_number.setText();
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());
// HERE IS THE ERROR :(
//order_overview_number.setText(String.valueOf(bestellung.get(position).getDatum()));
btn_order_overview_finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
epicDialog.dismiss();
}
});
epicDialog.show();
}
});
}
@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);
}
}
}
编辑(没用) 我试图通过 itemView 设置文本,如 epicDialog。
@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;
private TextView tw;
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);
tw = itemView.findViewById(R.id.order_overview_number);
}
}
@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());
holder.layout_user_bestellung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//TextView order_overview_number = epicDialog.findViewById(R.id.order_overview_number);
//order_overview_number.setText();
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());
holder.tw.setText("hallo");
btn_order_overview_finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
epicDialog.dismiss();
}
});
epicDialog.show();
}
});
}
解决方案
尝试
holder.layout_user_bestellung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View v = View.inflate(mContext, R.layout.user_popup_order_overview, null);
EditText order_overview_number = (EditText) v.findViewById(R.id.order_overview_number);
order_overview_number.setText(String.valueOf(bestellung.get(position).getDatum()));
Button btn_order_overview_finish = (Button) v.findViewById(R.id.btn_order_overview_finish);
System.out.println(bestellung.get(position).getBestellnummer());
btn_order_overview_finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
epicDialog.dismiss();
}
});
epicDialog.setContentView(v);
epicDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
epicDialog.show();
}
});
推荐阅读
- python - App Engine Python 运行时不会带来与本地相同的结果
- web3js - 我应该为 ThunderCore 的交易设置什么 gas 价格?
- flutter - 用户登录后在 StoreConnector 中 Flutter redux Navigator.pop()
- android - 不知道如何使用 kotlin 仅在 Parcelable 对象 Arraylist 中检索一些变量
- jonkykong-sidemenu - jonkykong SideMenu presentationStyle 升级到 6.4.8 后停止工作
- python - 无法获取网址。请求 404
- java - 开关中的计算案例语句(java)
- c++ - 用 C++ 中的索引来初始化一个带有 lambda 的向量
- sqlite - 如何在 DB Browser for SQLite (GUI) 中插入多个外键
- sql - 我可以将临时表中的两列加在一起吗?