Настройка onItemClickListener для элементов RecyclerView в Android

Я пытаюсь настроить OnItemClickListener для элементов RecyclerView, чтобы открывать новое действие при нажатии на элемент в RecyclerView.

Я разрабатываю для телефонов Android и работаю над реальным устройством API 19 (минимальный поддерживаемый API для моего приложения — 15). Я уже пробовал разные образцы в Интернете, но я не могу обойти это с рабочим кодом.

Это строки, которые я получаю в сообщении об ошибке:

Уровень активности:

public class LevelActivity extends AppCompatActivity implements ViewHolder.OnItemListener {

    private static final String TAG = "LevelActivity";

    private List<Item> list = new ArrayList<>();

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_level);

                List<Item> list = fill_with_data();

                RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_item_list);
                RecyclerViewAdapter adapter = new RecyclerViewAdapter(list, getApplication(),this);
                recyclerView.setAdapter(adapter);
                recyclerView.setLayoutManager(new LinearLayoutManager(this));

            }

    public List<Item> fill_with_data() {

        List<Item> list = new ArrayList<>();

        list.add(new Item("Batman vs Superman"));
        list.add(new Item("X-Men: Apocalypse"));
        list.add(new Item("Captain America: Civil War"));
        list.add(new Item("Kung Fu Panda 3"));
        list.add(new Item("Warcraft"));
        list.add(new Item("Alice in Wonderland"));

        return list;
    }

    @Override
    public void onItemClick(int position) {

        list.get(position);
        Intent intent = new Intent(this,QuestionActivity.class);
            startActivity(intent);
    }


}

ViewHolder:

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView name;
    OnItemListener mOnItemListener;

    ViewHolder(View itemView, OnItemListener onItemListener) {
        super(itemView);
        name = (TextView) itemView.findViewById(R.id.row_item);
        this.mOnItemListener = onItemListener;

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        mOnItemListener.onItemClick(getAdapterPosition());
    }

    public interface OnItemListener {
        void onItemClick(int position);
    }

AndroidМанифест:

        <!-- A child of a the level activity -->
        <activity android:name = ".QuestionActivity"
            android:label = "Question Activity"
            android:parentActivityName = ".LevelActivity" >
            <!-- Parent activity meta-data to support 4.0 and lower -->
            <meta-data
                android:name = "android.support.PARENT_ACTIVITY"
                android:value = ".LevelActivity" />>
        </activity>

Если вам понадобится больше кода, дайте мне знать.

Я ожидаю щелкнуть элементы списка RecyclerView и открыть новую активность (QuestionActivity) для начала. Это будет приложение-викторина, когда вы нажимаете на разные уровни, оно открывает другой начальный вопрос, но с тем же макетом, что и QuestionActivity.

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ..., PID: 1269
    java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
        at java.util.ArrayList.get(ArrayList.java:308)
        at com.example.marvelquiz.LevelActivity.onItemClick(LevelActivity.java:58)
        at com.example.marvelquiz.ViewHolder.onClick(ViewHolder.java:22)
        at android.view.View.performClick(View.java:4637)
        at android.view.View$PerformClick.run(View.java:19422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5586)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
        at dalvik.system.NativeStart.main(Native Method)

пожалуйста, поделитесь исходным кодом LevelActivity

Dharmender Manral 02.06.2019 13:57

@Dharmender Manral Я включил полный код

Anett6 02.06.2019 16:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

ваш listпустой.

ваша ошибка означает, что ваш список пуст, и вы хотите указать индекс 0, но ваш список пуст

list.get(position);//Error line

Вы ошибочно поместили свои данные в новый экземпляр списка, поэтому ваш глобальный список все еще пуст.

Изменить эту строку

List<Item> list = fill_with_data();

К этому

list = fill_with_data();

У меня отображаются элементы списка на экране. Я добавил файл LevelActivity и файл RecyclerViewAdapter выше.

Anett6 02.06.2019 16:10

@Anett6 Удачного кодирования

Radesh 03.06.2019 08:50

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