gpt4 book ai didi

java - 在 Adapter 类中使用 EpidDialog

转载 作者:行者123 更新时间:2023-12-01 16:30:13 25 4
gpt4 key购买 nike

我使用 ReyclerView 构建了订单概览。下面您可以看到适配器类的代码。我的问题仅发生在以下位置,如果用户单击 ReyclerView 的元素,则会出现一个带有扩展 View 的弹出窗口。

也会出现此弹出窗口。不幸的是,当我想用​​订单代码填充 TextView 时,应用程序支持并显示 null Attempt to invoke virtual method'void android.widget.TextView.setText (java.lang .CharSequence)' 在空对象引用上

如何避免此空错误以便一切正常?

import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

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, 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.order_popup_waiting);
epicDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Button btn_order_overview_finish = (Button) epicDialog.findViewById(R.id.btn_order_overview_finish);
/*
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);

}
}
}

最佳答案

您的对话框是用new Dialog(context)初始化的,但在您的onClick方法中,您希望您的epicDialog有一个ID为order_overview_number的TextVew。这将始终返回 null,因此 order_overview_number.setText() 会抛出 NPE。

要引用对话框的 View ,对话框需要一个包含该 View 的布局,类似于 fragment 和 Activity 。

这可能为您提供更多信息: How to create a Custom Dialog box in android?

https://developer.android.com/guide/topics/ui/dialogs

关于java - 在 Adapter 类中使用 EpidDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62058714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com