java - 在 Adapter 类中使用 EpidDialog

标签 java android android-studio adapter

我使用 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/

相关文章:

android - Android 10个EditText中的一个刚结束输入时如何结束输入?

Android Studio文件映射问题,无法识别文件

java - 如何查询在 Parse 中设置为指向其他表的指针的列的值

java - 如何针对 "TAB"和 "ARROW"键自定义 NatTable 的表格单元格导航功能以获得可接受的可用性

安卓 : Dialog occupy 100% width

android - 如何在未经许可的情况下获取设备UUID

android - 如何在android studio中创建自定义字体

c++ - 包含 Boost 库时 Android Studio 链接器命令失败

java - 如何暂停但不卡住Android执行?

java - 如何比较任何对象的两个实例并获取 "dirty"字段