我正在尝试在ArrayList中放置一个标记

时间:2016-10-06 11:21:34

标签: java android

我正试图以这种方式在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

3 个答案:

答案 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)中使用该项目。