Я пытаюсь настроить 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)
@Dharmender Manral Я включил полный код




ваш listпустой.
ваша ошибка означает, что ваш список пуст, и вы хотите указать индекс 0, но ваш список пуст
list.get(position);//Error line
Вы ошибочно поместили свои данные в новый экземпляр списка, поэтому ваш глобальный список все еще пуст.
Изменить эту строку
List<Item> list = fill_with_data();
К этому
list = fill_with_data();
У меня отображаются элементы списка на экране. Я добавил файл LevelActivity и файл RecyclerViewAdapter выше.
@Anett6 Удачного кодирования
пожалуйста, поделитесь исходным кодом LevelActivity