при нажатии на элемент списка RecyclerView
открывается новая активность за это отвечает код в адаптере:
public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
final Recept recept = receptes.get(position);
holder.imageView.setImageResource(recept.getImage());
holder.nameView.setText(recept.getName());
holder.discriptionView.setText(recept.getDiscription());
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, LastActivity.class);
intent.putExtra("name",recept.getName());
intent.putExtra("disc",recept.getDiscription());
context.startActivity(intent);
}
});
}
При нажатии, LastActivity
вылетает и осуществляется переход на главную активность, почему и как это исправить?
Ошибка из лога:
03-07 19:04:43.387 12128-12323/com.example.len.recept E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f8fb64240
03-07 19:04:43.973 12128-12128/com.example.len.recept E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.len.recept, PID: 12128
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ComponentName.<init>(ComponentName.java:128)
at android.content.Intent.<init>(Intent.java:4686)
at com.example.len.recept.DataAdapter$1.onClick(DataAdapter.java:45)
at android.view.View.performClick(View.java:5317)
at android.view.View$PerformClick.run(View.java:21648)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5927)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
Это вот эта строчка:
Intent intent = new Intent(context, LastActivity.class);
Код адаптера:
class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private Context context;
private LayoutInflater inflater;
private List<Recept> receptes;
DataAdapter(Context context, List<Recept> receptes) {
this.receptes = receptes;
this.inflater = LayoutInflater.from(context);
}
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.adapter_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
final Recept recept = receptes.get(position);
holder.imageView.setImageResource(recept.getImage());
holder.nameView.setText(recept.getName());
holder.discriptionView.setText(recept.getDiscription());
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, LastActivity.class);
intent.putExtra("name",recept.getName());
intent.putExtra("disc",recept.getDiscription());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return receptes.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
final ImageView imageView;
final TextView nameView, discriptionView;
final CardView cv;
ViewHolder(View view){
super(view);
imageView = (ImageView)view.findViewById(R.id.image);
nameView = (TextView) view.findViewById(R.id.textView);
discriptionView = (TextView) view.findViewById(R.id.textView2);
cv = (CardView) view.findViewById(R.id.cv_rv);
}
}
}
Код из активности:
for(int i = 0;i<infoListText.size();i++){
receptList.add(new Recept(infoListText.get(i),discriptionListText.get(i)));
}
adapter = new DataAdapter(Main2Activity.this, receptList); // Сюда засунуть ArrayList<Recept> надо!
recyclerView.setAdapter(adapter);
В приведенном вами коде член класса DataAdapter
private Context context;
нигде не инициализирован. Поэтому в итоге вы получаете NullPointerException.
Kaк исправить:
class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private Context context;
private LayoutInflater inflater;
private List<Recept> receptes;
DataAdapter(Context context, List<Recept> receptes) {
this.context = context;
// и т.д.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть проект на Spring MVC и я хочу подключиться с фронтенда (JavaScript) socketio веб сокету через Socks5
Не знаю как точно сформулировать вопрос в гугл, и где искать ответЕсть класс Nclass и есть HashMap (вне этого класса) в котором ключ это поле name класса...
На пустой странице есть формаМоя задача - выполнить свой код вместо отправки этой формы