Как передать намерение в классе адаптера

Я пытаюсь перейти от одного действия к другому, используя намерение, но мое приложение дает сбой, когда вызывается метод 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)

сообщение об ошибке из logcat.

Abhay Koradiya 04.10.2018 10:24

Ваш context может быть null.

Piyush 04.10.2018 10:25

Logcat должен указать, какой объект имеет значение NULL. Пожалуйста, опубликуйте его, чтобы мы могли помочь. Скорее всего, context равен нулю.

Michael Lam 04.10.2018 10:25

вы можете использовать этот держатель .itemView.context.startActivity (намерение)

Deepak Kumar 04.10.2018 10:33
context может иметь значение null, поэтому передайте контекст вашей активности адаптеру при его создании, тогда вы можете использовать этот контекст в адаптере.
Zaid Mirza 04.10.2018 10:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
3 105
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Измените это

 Intent intent=new Intent(context,crunches.class);
            context.startActivity(intent);

К

v.getContext().startActivity(new Intent(v.getContext(), crunches.class));

Надеюсь, это поможет.!

Добро пожаловать, рад помочь.! Удачного кодирования :)

Mohamed Mohaideen AH 04.10.2018 10:33

Я вижу, что вы исправили это, но попробуйте изменить

 Intent intent=new Intent(context,crunches.class);

к

 Intent intent=new Intent(this,crunches.class);

мне любопытно, сработает ли это

Это не сработает, я передал намерение в свой класс адаптера, который будет загружен в мой основной класс, поэтому, просто передав (this, crunches.class), он не сможет указать на основной класс, и исключение нулевого указателя будет сгенерировано, следовательно, лучший способ - использовать getcontext () для решения этой проблемы.

user10169672 04.10.2018 11:43

Ни владелец, ни адаптер не обязаны начинать упражнение! Принцип ТВЕРДЫЙ 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));
}

кроме того, вам не нужно передавать контекст адаптеру

Другие вопросы по теме