@suda911

Не работает обработчик нажатий в RecyclerView?

Только разобрался как работает RecyclerView.Adapter, следующим пунктом был обработчик нажатий. Читал как делают. Для меня большим интересом было то, что их делают все по разному: обработчик ставят в одном методе, то в другом.
В общем, суть в том, что по нажатию на пункт меню в RecyclerView нужно перейти в другое Activity , и передать значение( _id, это значение в RecycleView я не как не вывожу , оно у меня хранится в списке) по которому из БД можно будет взять все данные и вывести на форму.
Читал что это можно делать в адаптере и нашёл одно из самых лёгких решений, но не получается.
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {




    public static class PersonViewHolder extends RecyclerView.ViewHolder  {
        CardView cv;
        TextView personName;
        TextView personAge;
        PersonViewHolder(View itemView) {
            super(itemView);
            cv = (CardView)itemView.findViewById(R.id.cv);
            personName = (TextView)itemView.findViewById(R.id.person_name);
            personAge = (TextView)itemView.findViewById(R.id.person_cell);

        }

    }


    List<MyItem> items;
    RVAdapter(List<MyItem> items){
        this.items = items;
    }

    @Override
    public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
        PersonViewHolder pvh = new PersonViewHolder(v);
        return pvh;
    }

    @Override
    public void onBindViewHolder(RVAdapter.PersonViewHolder personViewHolder, int i) {

         final int idvadaptere = items.get(i).idvliste;   // вот то значение которое я хочу передать вместе с Intent
        personViewHolder.personName.setText(items.get(i).name);
        personViewHolder.personAge.setText(String.valueOf(items.get(i).cell));
        personViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context context = v.getContext();
                Intent ddddd = new Intent(context, Main2Activity.class);
                ddddd.putExtra("ddddddd", idvadaptere);
                context.startActivity(ddddd);


            }
        });

    }


    @Override
    public int getItemCount() {
        return items.size();
    }


    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

}


Вот сразу LogCat/

02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime: FATAL EXCEPTION: main
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime: Process: com.example.pro.appi, PID: 32618
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pro.appi/com.example.pro.appi.Main2Activity}: android.content.res.Resources$NotFoundException: String resource ID #0x2
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:147)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5253)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:  Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.content.res.Resources.getText(Resources.java:284)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.widget.TextView.setText(TextView.java:4176)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at com.example.pro.appi.Main2Activity.onCreate(Main2Activity.java:133)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5975)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:147) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5253) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
02-16 22:02:22.065 32618-32618/com.example.pro.appi E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 


И да , я не так давно задавал вопрос и мне подсказали , что вся суть ошибки возникающей в приложении можно узнать из LogCat'. То что невозможно запустить активити - я прочёл, а как решить проблему.. Если не затруднит, подскажите, где в нём сейчас указана ошибка и как вообще можно это расшифровывать, что бы с такими вопросами не выходить в свет, а разбираться самому.
  • Вопрос задан
  • 1607 просмотров
Решения вопроса 1
@georgeci
Читаем внимательно:
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2
...
at android.widget.TextView.setText(TextView.java:4176)
at com.example.pro.appi.Main2Activity.onCreate(Main2Activity.java:133)

Вы в Main2Activity присваиваете TextView.setText(#0x2) то есть передаёте число, метод setText c числовым параметром ищет строку в ресурсах. Не находит её и падает, выводя шикарный StackTrace.

Вы должны примерно так:
int number = 5;
TextView.setText(Integer.toString(number))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ImangazalievM
@ImangazalievM
Android-программист
Как установить OnItemClickListener и OnItemLongClickListener для RecycleView? - java-help.ru/onitemclicklistener-and-onitemlongcli...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы