我正试图以这种方式在ArrayList中放置一个标记:
首先我在MainActivity类声明:
public ArrayList<Marker> myList = new ArrayList<Marker>();
启动程序后标记第一个点并隐藏它:
if (myList.get(0)==null)
{
MarkerOptions options = new MarkerOptions()
.position(latLng)
.visible(false)
myList.add(0, mMap.addMarker(options));
}
然后我写下按下的标记按钮
myButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
LatLng latLng = new LatLng(currentLatitude, currentLongitude)
if (myList.get(0) != null)
{
MarkerOptions options = new MarkerOptions()
.position(latLng)
myList.add(1,mMap.addMarker(options));
}
else if (myList.get(0) != null && (myList.get(1) != null))
{
MarkerOptions options = new MarkerOptions()
.position(latLng)
myList.add(2,mMap.addMarker(options));
}
应用程序在开始时崩溃了...... 当tab []代替列表时,程序将起作用
java.lang.IndexOutOfBoundsException:索引0无效,大小为0
答案 0 :(得分:1)
在获取数组的索引0之前,请检查它是否为空。
if (!myList.isEmpty())
{
if (myList.get(0)==null)
{
//do your thing
}
}
答案 1 :(得分:1)
这些空检查是不必要的,只需使用List.add(Object o)
函数,它不会将索引作为参数。
答案 2 :(得分:0)
我敢打赌这条线导致了崩溃:
myList.add(1,mMap.addMarker(options))
如果myList
为空,则调用myList.add(foo, 1)
会抛出IndexOutOfBoundsException
,导致您的应用崩溃。这样做的原因是数组是0索引的,这意味着第一个值是在索引0处。这听起来可能是违反直觉的,但是在空列表的索引1中添加一些东西实际上是试图设置其第二个元素
总的来说,您的代码非常奇怪。 {/ 1}}的非索引版本会在列表末尾添加一个项目,因此您只需在List.add(Object o)
中使用该项目。