mLayoutTab0.setSelected(true); mRouteList.clear(); mRouteList.addAll(mRouteDetails.get(0)); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(layoutManager); mResultAdapter = new RouteResultAdapter(mRouteList); mRecyclerView.setAdapter(mResultAdapter); // 展示长途信息 if (BaiduNaviManagerFactory.getRouteResultManager().isLongDistance()) { mLDLayout.setVisibility(View.VISIBLE); } else { mLDLayout.setVisibility(View.GONE); } 报错, java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.get(ArrayList.java:437)
时间: 2024-02-14 12:35:21 浏览: 75
根据你提供的代码,我可以看出报错是在第二行代码 `mRouteList.addAll(mRouteDetails.get(0));` 发生的,因为在这一行代码中 `mRouteDetails` 集合的大小为0,而你试图从中获取第0个元素。导致了 `java.lang.IndexOutOfBoundsException: Index: 0, Size: 0` 异常。你可以在这行代码执行之前,先检查一下 `mRouteDetails` 集合是否为空或者大小为0,如果是的话,需要先添加元素再执行 `mRouteList.addAll(mRouteDetails.get(0));`。
相关问题
我在设置完数据之后设置的布尔值, mLayoutTab0.setSelected(true); mRouteDetails = routePlaneInfos.getRouteDetailLists(); mRouteList.clear(); mRouteList.addAll(mRouteDetails.get(0)); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(layoutManager); mResultAdapter = new RouteResultAdapter(mRouteList); mRecyclerView.setAdapter(mResultAdapter); isDataLoaded = true; 用来判断 没有数据的时候点击无效,如以下代码:if (isDataLoaded) { mLayoutTab0.setSelected(false); mLayoutTab1.setSelected(false); mLayoutTab2.setSelected(true); interruptCountdown(); BaiduNaviManagerFactory.getRouteResultManager().selectRoute(2); BaiduNaviManagerFactory.getRouteResultManager().fullView(); mRouteList.clear(); mRouteList.addAll(mRouteDetails.get(2)); mResultAdapter.notifyItemChanged(2); } else { mLayoutTab2.setEnabled(false); Log.d("TAGAA", "onClick: 没有数据 点击无效2"); } 这个isDateLoaded=true; 但是当没有数据的时候我点击数据1,没有反应,是正常的,但是出现数据了,我再次点击数据1,还是执行的else,这个逻辑应该怎么修改?帮我改一下
你可以将判断数据是否加载完成的逻辑放入到点击事件中,这样就可以动态判断了。修改后的代码如下所示:
```
mLayoutTab0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (routePlaneInfos == null || routePlaneInfos.getRouteDetailLists() == null) {
Toast.makeText(getActivity(), "数据加载中,请稍等", Toast.LENGTH_SHORT).show();
return;
}
if (isDataLoaded) {
mLayoutTab0.setSelected(true);
mLayoutTab1.setSelected(false);
mLayoutTab2.setSelected(false);
interruptCountdown();
BaiduNaviManagerFactory.getRouteResultManager().selectRoute(0);
BaiduNaviManagerFactory.getRouteResultManager().fullView();
mRouteList.clear();
mRouteList.addAll(mRouteDetails.get(0));
mResultAdapter.notifyDataSetChanged();
} else {
Log.d("TAGAA", "onClick: 没有数据 点击无效2");
}
}
});
```
这样就可以动态判断数据是否加载完成了,如果加载完成了就执行对应的逻辑,否则提示用户数据正在加载中。
checkRoutePlanItemsValidity(mRoutePlanItems); mLayoutTab0.setSelected(true); mLayoutTab1.setSelected(false); mLayoutTab2.setSelected(false); interruptCountdown(); BaiduNaviManagerFactory.getRouteResultManager().selectRoute(0); BaiduNaviManagerFactory.getRouteResultManager().fullView(); mRouteList.clear(); mRouteList.addAll(mRouteDetails.get(0)); mResultAdapter.notifyItemChanged(0); 没数据时点击了调用了, mRouteList.addAll(mRouteDetails.get(1));出现错误 java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
这个错误的原因是你尝试从空列表 `mRouteDetails` 中获取第二个元素,导致了 `IndexOutOfBoundsException` 异常。你需要先确认 `mRouteDetails` 中是否包含至少两个元素,或者在获取第二个元素前先检查列表的大小。可以使用以下代码进行检查:
```
if (mRouteDetails.size() >= 2) {
mRouteList.addAll(mRouteDetails.get(1));
mResultAdapter.notifyItemChanged(1);
} else {
// 处理列表为空的情况
}
```
这样就可以避免在列表为空时出现异常了。
阅读全文