Я пытаюсь перейти от одного действия к другому, используя намерение, но мое приложение дает сбой, когда вызывается метод onclick с выдачей исключения нулевого указателя, вот код моего класса адаптера.
@Override
public void onBindViewHolder(absadapter.exViewHolder holder, final int position){
holder.exname.setText(exList.get(position).name);
holder.exlogo.setImageResource(exList.get(position).logoId);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (position == 0) {
Intent intent=new Intent(context,crunches.class);
context.startActivity(intent);
}
}
});
}
Вот ошибка logcat:
FATAL EXCEPTION: main
Process: com.example.ruchit.totalfitness, PID: 1481
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:130)
at android.content.Intent.<init>(Intent.java:5787)
at com.example.ruchit.totalfitness.absadapter$1.onClick(absadapter.java:60)
at android.view.View.performClick(View.java:6312)
at android.view.View$PerformClick.run(View.java:24811)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:6649)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
Ваш context может быть null.
Logcat должен указать, какой объект имеет значение NULL. Пожалуйста, опубликуйте его, чтобы мы могли помочь. Скорее всего, context равен нулю.
вы можете использовать этот держатель .itemView.context.startActivity (намерение)
context может иметь значение null, поэтому передайте контекст вашей активности адаптеру при его создании, тогда вы можете использовать этот контекст в адаптере.




Измените это
Intent intent=new Intent(context,crunches.class);
context.startActivity(intent);
К
v.getContext().startActivity(new Intent(v.getContext(), crunches.class));
Надеюсь, это поможет.!
Добро пожаловать, рад помочь.! Удачного кодирования :)
Я вижу, что вы исправили это, но попробуйте изменить
Intent intent=new Intent(context,crunches.class);
к
Intent intent=new Intent(this,crunches.class);
мне любопытно, сработает ли это
Это не сработает, я передал намерение в свой класс адаптера, который будет загружен в мой основной класс, поэтому, просто передав (this, crunches.class), он не сможет указать на основной класс, и исключение нулевого указателя будет сгенерировано, следовательно, лучший способ - использовать getcontext () для решения этой проблемы.
Ни владелец, ни адаптер не обязаны начинать упражнение! Принцип ТВЕРДЫЙ S говорят об ответственности за один объект! Роль держателя - это только отображение значений и обработка щелчка, но не поведение щелчка! Вы должны сделать это в действии, которое запускает ресайклер и адпаттер, используя интерфейс или, что проще, Нож для масла
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (position == 0) {
EventBus.getDefault().post(new OnClickEvent())
}
}
});
в деятельности
@Subscribe(threadMode = Thread.MAIN)
public void onClickItem(OnClickEvent event) {
startActivity(new Intent(this,crunches.class));
}
кроме того, вам не нужно передавать контекст адаптеру
сообщение об ошибке из logcat.