Я попытался получить массив из адаптера из своего кода
вот массив, который я хотел получить от своего адаптера с именем 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 . Но в целом я предполагаю, что вы используете RecyclerView в коде, поэтому шаги по использованию RecyclerView важны, сначала вы должны установить LayoutManager для RecyclerView. Затем создайте адаптер и установите для него RecyclerView, и я рекомендую вам выполнить эти шаги в onCreate, а не в onResume. Вот небольшой пример
RecyclerView recyclerView = findViewById(R.id.rec);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyRecyclerViewAdapter(this, list);
recyclerView.setAdapter(adapter);
Также сделайте свой массив в адаптере общедоступным или напишите для него геттер. После вызова setAdapter для RecyclerView вы можете получить свои данные в адаптере. Например, вы можете определить кнопку и в 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
)