簡體   English   中英

從另一個 class 獲取 Array 並將其顯示給小吃店

[英]get Array from another class and show it to a snackbar

我試圖從我的代碼中的適配器獲取一個數組

這是我想從我的適配器獲取的數組,名為 MakananAdapter:

private int[] JumlahPesan = {0,0,0,0};

數組不斷變化,因為用戶將決定他們想要的數量,這里是 onBindViewHolder 代碼:

public void onBindViewHolder(@NonNull viewHolder holder, final int position) {
    ImageView ivMakanan = holder.ivMakanan;
    TextView tvNamaHarga = holder.tvNamaMakanan;
    TextView tvKetersediaan = holder.tvKetersediaan;
    TextView tvHarga = holder.tvHargaMakanan;
    final TextView tvPesanan = holder.tvJumlahPesanan;
    Button btnTambah = holder.btnTambah;
    Button btnKurang = holder.btnKurang;

    ivMakanan.setImageResource(makanans.get(position).getGambarMakanan());
    tvNamaHarga.setText(makanans.get(position).getNamaMakanan());
    tvKetersediaan.setText("Stok : " + makanans.get(position).getStatusMakanan());
    tvHarga.setText("Harga : " + makanans.get(position).getHargaMakanan());
    btnTambah.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            JumlahPesan[position]++;
            tvPesanan.setText(String.valueOf(JumlahPesan[position]));
        }
    });
    btnKurang.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            JumlahPesan[position]--;
            tvPesanan.setText(String.valueOf(JumlahPesan[position]));
        }
    });
}

如您所見,我制作了一個按鈕來增加和減少數組的數據

我試圖將數組數據獲取到我的活動中,但仍然出現錯誤。

我的活動名為 PilihMakananActivity.class

這是從適配器保存數據的數組

private int[] Pesanan = {0,0,0,0};

我試圖在 onResume 中獲取數據

protected void onResume() {
    super.onResume();
    com.example.iotforcanteen.adapter.MakananAdapter coba = null;
    for (int i = 0; i<4 ; i++) {
        Pesanan [i]= coba.AmbilJumlahPesanan(i);
    }
}

我試着在這樣的小吃店里展示它

btnKonfirmasi.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar.make(v, Pesanan[0] + Pesanan[1] + Pesanan[2] + Pesanan[3],Snackbar.LENGTH_SHORT).show();
    }
});

如果代碼如此混亂,我很抱歉,因為我是 android 開發的新手。所以有什么辦法可以解決這個錯誤嗎?

它有錯誤,因為您在 onResume 中設置了適配器 null 值。 但總的來說我假設你在代碼中使用 RecyclerView,所以使用 RecyclerView 的步驟很重要,首先你必須為 RecyclerView 設置 LayoutManager。 然后制作一個適配器並將其設置為 RecyclerView,我建議您在 onCreate 而不是 onResume 中執行此步驟。 這是一個小例子

    RecyclerView recyclerView = findViewById(R.id.rec);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new MyRecyclerViewAdapter(this, list);
    recyclerView.setAdapter(adapter);

還要將適配器中的數組公開或為其編寫getter。 為 RecyclerView 調用 setAdapter 后,您可以在適配器中獲取數據。 例如,您可以定義一個按鈕並在 OnClickListener 中獲取所需的數組(這里是 JumlahPesan)在適配器中

您沒有啟動此適配器( null ),下面幾行試圖從中訪問數據,這是NullPointerException

com.example.iotforcanteen.adapter.MakananAdapter coba = null;
for (int i = 0; i<4 ; i++) {
    Pesanan [i]= coba.AmbilJumlahPesanan(i);
}

參考附加到您的ListViewRecyclerView的已經存在的適配器,而不是新創建的並且根本沒有初始化

請注意onResume在開始時被調用一次,因此您的Pesanan不會有當前數據,只能從Activity開始復制

也許只是在按下按鈕時直接獲取您的值,而在Activity中沒有數組的副本:

btnKonfirmasi.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar.make(coordinatorLayout,
            adapterAttachedToView.AmbilJumlahPesanan(0) + " " +
            adapterAttachedToView.AmbilJumlahPesanan(1) + " " + 
            adapterAttachedToView.AmbilJumlahPesanan(2) + " " + 
            adapterAttachedToView.AmbilJumlahPesanan(3),
            Snackbar.LENGTH_SHORT).show();
    }
});

請注意Snackbar.make(應該采取View ,其中Snackbar將出現,而不是單擊Button (您將v傳遞給Snackbar.make

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM