#java #android #arrays #android-studio
#java #Android #массивы #android-studio
Вопрос:
Я попытался получить массив из адаптера из своего кода
вот массив, который я хотел получить из своего адаптера, с именем 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 development.so есть ли какой-нибудь способ исправить эту ошибку?
Ответ №1:
У него ошибка, потому что вы установили для своего адаптера нулевое значение в 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) в адаптере
Ответ №2:
вы не инициируете этот адаптер ( 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
)