Настройка onItemClickListener для RecyclerView элементов в Android - PullRequest
0 голосов
/ 02 июня 2019

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

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

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

LevelActivity:

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);
    }

AndroidManifest:

        <!-- 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)

1 Ответ

0 голосов
/ 02 июня 2019

ваш list равен пуст .

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

list.get(position);//Error line

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

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

List<Item> list = fill_with_data();

На эту

list = fill_with_data();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...