IndexOutOfBound исключение при вставке текстового представления в Linearlayout - PullRequest
0 голосов
/ 02 мая 2018

Я создаю календарь. и хочу добавить события нескольких дней, такие как приложение Google Calender, поэтому в этом я добавляю событие на каждый день. Я хочу добавить одно textview к linearlayout в позиции 2. в позиции 0 и 1 нет добавленных представлений, это мое код для вставки вида.

`

TextView tv = new TextView(context);
tv.setBackgroundResource(R.drawable.event_view);
int height 
=context.getResources().getDimensionPixelSize(R.dimen.event_image_size);
LinearLayout.LayoutParams params = new 
LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,height); 
int previousViewPosition = AppConstants.eventList.get(i-1).getEvent_count();                                        
AppConstants.eventList.get(i).setEvent_count(previousViewPosition);
tv.setPadding(0, 0, 0, 0);
tv.setText(AppConstants.eventList.get(i).getStrName());
params.setMargins(0, 0, 0, 1);
tv.setLayoutParams(params);
tv.setTextSize(8);
tv.setTextColor(context.getResources().getColor(R.color.white));
ll_event_image.addView(tv, previousViewPosition);

`

это дает мне ошибку IndexOutOfBound.

05-02 11: 57: 17.162 8922-8922 / com.calender.demo.calendar_api W / System.err: java.lang.IndexOutOfBoundsException: index = 2 count = 1 05-02 11: 57: 17.187 8922-8922 / com.calender.demo.calendar_api W / System.err: at android.view.ViewGroup.addInArray (ViewGroup.java:4542) в android.view.ViewGroup.addViewInner (ViewGroup.java:4463) в android.view.ViewGroup.addView (ViewGroup.java:4218) 05-02 11: 57: 17.188 8922-8922 / com.calender.demo.calendar_api W / System.err: at com.desai.vatsal.mydynamiccalendar.DateListAdapter $ DateViewHolder.setDates (DateListAdapter.java:278) в com.desai.vatsal.mydynamiccalendar.DateListAdapter.onBindViewHolder (DateListAdapter.java:575) в android.support.v7.widget.RecyclerView $ Adapter.onBindViewHolder (RecyclerView.java:6673) в android.support.v7.widget.RecyclerView $ Adapter.bindViewHolder (RecyclerView.java:6714) в android.support.v7.widget.RecyclerView $ Recycler.tryBindViewHolderByDeadline (RecyclerView.java:5647) в android.support.v7.widget.RecyclerView $ Recycler.tryGetViewHolderForPositionByDeadline (RecyclerView.java:5913) в android.support.v7.widget.RecyclerView $ Recycler.getViewForPosition (RecyclerView.java:5752)

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

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

if(previousViewPosition >= ll_event_image.getChildCount())
   ll_event_image.addView(tv);
else
   ll_event_image.addView(tv, previousViewPosition);
0 голосов
/ 02 мая 2018

Насколько я понимаю, вы пытаетесь добавить представление с индексом 2 в LinearLayout, но у LinearLayout нет представления на индексах 0 и 1. Сначала вам нужно добавить представление с индексами 0 и 1, только потом можете получить доступ к индексу 2. Вы можете попробовать добавить пустое представление, если хотите оставить это поле пустым, но это зависит от вас и от того, что вы пытаетесь достичь.

0 голосов
/ 02 мая 2018

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

В вашем случае вы пытаетесь получить доступ к объекту am в позиции index = 2, но в вашем массиве есть только 2 элемента position = 0 and position = 1

EDIT: Проблема в основном вызвана этой строкой

AppConstants.eventList.get(i-1).getEvent_count(); <- Убедитесь, что вы не выходите за пределы <code>eventList.

РЕДАКТИРОВАТЬ 2:

После более внимательного прочтения вы также пытаетесь добавить представление в LinearLayout в previousPosition, которое в этом случае может оказаться недопустимым.

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