我正在创建日历视图。并希望添加多天的事件,如谷歌日历应用程序,所以在这我每天都添加事件。我想在第二个位置添加一个textview到线性布局。在位置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)at android.view.ViewGroup.addViewInner(ViewGroup.java:4463)at 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)at at 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)
答案 0 :(得分:2)
更改addView行
if(previousViewPosition >= ll_event_image.getChildCount())
ll_event_image.addView(tv);
else
ll_event_image.addView(tv, previousViewPosition);
答案 1 :(得分:1)
例如,当您尝试访问IndexOutOfBoundsException
中不存在的职位时,通常会导致array
。
在您的情况下,您尝试访问位置index = 2
处的对象,但您的数组只有2个元素position = 0 and position = 1
修改强> 问题主要是由这条线引起的
AppConstants.eventList.get(i-1).getEvent_count();
< - 确保您没有超出eventList
范围。
编辑2:
仔细阅读后,您还试图在LinearLayout
previousPosition
添加一个视图,在这种情况下可能不是有效位置。
答案 2 :(得分:1)
据我所知,你试图在LinearLayout的索引2处添加一个视图,但是LinearLayout在索引0和1处没有任何视图。你需要先在索引0和1处添加一个视图,然后才能可以访问索引2.如果您想将该空格留空,可以尝试添加空视图,但这取决于您以及您要完成的任务。