java - 如何在RecyclerView Adapter类中初始化正确的TextView?

标签 java android android-recyclerview

我想设置自定义构建弹出窗口的文本。 一旦我想设置文本,经典的 NullPointerException 就会出现。如何访问自定义弹出窗口中的文本字段?如何更改 TextView order_overview_number.setText(...) 的文本。 我该如何正确初始化它? TextView order_overview_number = EpidDialog.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);

        }
    }
}

编辑(不起作用) 我尝试像 EpidDialog 一样通过 itemView 设置文本。

@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();
            
                        }
                    });

关于java - 如何在RecyclerView Adapter类中初始化正确的TextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62482617/

相关文章:

android - 嵌套 RecyclerView 问题 - 键盘出现后,第二个 RecyclerView 的最后一项被复制到第一个 RecyclerView 中

java - Netbeans - input.hasNext() 在按下 ctrl+z 时什么都不做

java - WebView 和 Nexus Chrome 浏览器的工作方式与我在 PC 上的 Chrome 浏览器不同

android - AccessToken token :ACCESS_TOKEN_REMOVED in Facebook Android SDK

java - Cordova android 后台插件在 5 分钟后被杀死

android - 内部类ViewHolder的构造函数只能用包含类的接收者调用

java - 如何从build.gradle读取config.rpc.port的值到corda中的java类

JavaFX 拆分菜单按钮箭头触发事件

android - 如果我的应用程序针对牛轧糖设备,startService() 仍然有效

java - 为什么这个 RecyclerView + CardView 示例不起作用?