[英]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);
}
參考附加到您的ListView
或RecyclerView
的已經存在的適配器,而不是新創建的並且根本沒有初始化
請注意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.