mLayoutTab0.setSelected(false); mLayoutTab1.setSelected(true); mLayoutTab2.setSelected(false); interruptCountdown(); BaiduNaviManagerFactory.getRouteResultManager().selectRoute(1); BaiduNaviManagerFactory.getRouteResultManager().fullView(); mRouteList.clear(); mRouteList.addAll(mRouteDetails.get(1)); mResultAdapter.notifyItemChanged(1); 以上代码,当mRoutePlanItems为空时,用户点击,会造成程序闪退崩溃,请帮我改善一下
时间: 2023-11-22 12:53:02 浏览: 73
在这段代码中,我们需要检查`mRoutePlanItems`是否为空,如果为空则不执行这个代码块。我们可以使用`if`语句来实现这一点:
```
if (mRoutePlanItems != null && !mRoutePlanItems.isEmpty()) {
mLayoutTab0.setSelected(false);
mLayoutTab1.setSelected(true);
mLayoutTab2.setSelected(false);
interruptCountdown();
BaiduNaviManagerFactory.getRouteResultManager().selectRoute(1);
BaiduNaviManagerFactory.getRouteResultManager().fullView();
mRouteList.clear();
mRouteList.addAll(mRouteDetails.get(1));
mResultAdapter.notifyItemChanged(1);
} else {
// do something when mRoutePlanItems is empty
}
```
这样,当`mRoutePlanItems`为空时,程序将不会执行这段代码,而是执行`else`语句中的代码块。你可以根据自己的需求来编写`else`语句中的代码。
相关问题
if (mRoutePlanItems != null) { mLayoutTab0.setSelected(false); mLayoutTab1.setSelected(true); mLayoutTab2.setSelected(false); interruptCountdown(); BaiduNaviManagerFactory.getRouteResultManager().selectRoute(1); BaiduNaviManagerFactory.getRouteResultManager().fullView(); mRouteList.clear(); mRouteList.addAll(mRouteDetails.get(1)); mResultAdapter.notifyItemChanged(1); } else { mLayoutTab1.setFocusable(true); } 以上代码是没有数据的时候,用户点击无效,写的是否正确?有没有更好的处理方法?
以上代码是在 mRoutePlanItems 为 null 的情况下用户点击时的处理方法。如果没有数据,那么用户点击是无效的,并且通过设置 mLayoutTab1 的 focusable 属性为 true,可以让该控件获得焦点,以便用户知道该按钮是可点击的。
如果您想要更好的处理方法,可以考虑在没有数据时,将该按钮设置为不可用状态,以防止用户误操作。您可以使用以下代码:
```java
mLayoutTab1.setEnabled(false);
```
并在有数据时将其重新设置为可用状态:
```java
mLayoutTab1.setEnabled(true);
```
这样做可以让用户明确地知道该按钮是否可用,并且避免了误操作。
我在设置完数据之后设置的布尔值, 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");
}
}
});
```
这样就可以动态判断数据是否加载完成了,如果加载完成了就执行对应的逻辑,否则提示用户数据正在加载中。
阅读全文