Класс внутри цикла for - PullRequest
       11

Класс внутри цикла for

0 голосов
/ 23 марта 2011

новичок, у меня класс:

класс PolyOverlay расширяет оверлей {

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow)
    {

        try {

        List<GeoPoint> points = new ArrayList<GeoPoint>();
        GeoPoint tmpPoint;

        double lat2;
        double lng2;

        String args[] = {"",""};
        args = sitesList.getpolyLine().get(daI).split("\\;");
        //Toast.makeText(getApplicationContext(),"T: " + args[0],Toast.LENGTH_SHORT ).show();


        for (int i = 0; i < args.length; i++) {
            String coordinates2[] = {"",""};
            String args2[] = {"",""};
            args2 = args[i].split("\\,");

            coordinates2[0]= args2[0];
            coordinates2[1]= args2[1];

          //Toast.makeText(getApplicationContext(),"T: " + coordinates2[0],Toast.LENGTH_SHORT ).show();


            lat2= Double.parseDouble(coordinates2[0]);
            lng2= Double.parseDouble(coordinates2[1]);
            tmpPoint = new GeoPoint((int) (lat2 * 1E6), (int) (lng2 * 1E6) );                   
            points.add(tmpPoint);


        }


        //for(Polygon polygonTemp : polygonList)
        //{           
            Path p = new Path();
            Projection projection = mapView.getProjection();

            boolean firstTime = true;
            for(GeoPoint geoPoint : points)
            {
                Point drawPoint = new Point();
                projection.toPixels(geoPoint, drawPoint);

                if(firstTime)
                {
                    p.moveTo(drawPoint.x, drawPoint.y);
                    firstTime = false;
                }
                else
                {
                    p.lineTo(drawPoint.x, drawPoint.y);
                }
            }
            p.setFillType(Path.FillType.EVEN_ODD);

            Paint polyPaint = new Paint();
            polyPaint.setStrokeWidth(1);
            polyPaint.setStyle(Paint.Style.FILL_AND_STROKE);
            polyPaint.setAntiAlias(true);
            polyPaint.setColor(Color.BLUE);
            polyPaint.setAlpha(30);
            canvas.drawPath(p, polyPaint);
            firstTime = true;
        //}
        super.draw(canvas, mapView, shadow);
        } catch (Exception e) {
            Toast.makeText(epapp.this, "Err: " + e, Toast.LENGTH_LONG).show();

        }
    }

}

Затем внутри цикла xml я делаю это:

for (int i = 0; i < sitesList.getStrap().size(); i++) {

            //icons

            String pargs[] = sitesList.getCentr().get(i).split("\\,");

            String coordinates3[] = {"",""};
            coordinates3[0] = pargs[0].toString();
            coordinates3[1] = pargs[1].toString();

            //Toast.makeText(epapp.this, "Center: " + coordinates3[0], Toast.LENGTH_LONG).show();

            double lat2 = Double.parseDouble(coordinates3[0]);
            double lng2 = Double.parseDouble(coordinates3[1]);



            np = new GeoPoint(
                (int) (lat2 * 1E6), 
                (int) (lng2 * 1E6)); 
            Drawable drawable = this.getResources().getDrawable(R.drawable.iconresidential);
            IconItemizedOverlay itemizedoverlay = new IconItemizedOverlay(drawable,this);


            OverlayItem overlayitem = new OverlayItem(np, "Property Information", "JONES EMERSON ROBERT JR & SARA MARIA<br>1032 Briarwood Dr Wauchula 33873<br>HARDEE County<br>STRAP 05-34-25-0865-00001-0020");
            itemizedoverlay.addOverlay(overlayitem);
            mapView.getOverlays().add(itemizedoverlay);


            //if (i==1){


        //polyString = sitesList.getpolyLine().get(i);
        daI=i;  
        //polygon

            PolyOverlay myPolyOverlay = new PolyOverlay();
            mapView.getOverlays().add(myPolyOverlay);

                   //}  

        }

хорошо, поэтому «проблема» в том, что если я выполняю часть // if (i == 1) {в цикле, где «daI» установлен на «i», мой «Polygon» отображается на карте для этот элемент в XML, если я «REM» его, оверлей Polygon всегда является последним элементом в XML. Список xml всегда содержит 20 элементов, и кажется, что переменная daI всегда равна 19 (последний индекс в списке 0-19)

Очевидно, что не делать что-то, поэтому класс PolyOverlay становится "законченным" до завершения цикла xml ?? Это похоже на то, что цикл xml проходит через наборы «daI» до последнего, а PolyOverlay загружает полигон для этого последнего элемента ...

Мои значки просто прекрасны, кстати, на карте ...

1 Ответ

2 голосов
/ 23 марта 2011

k, я отсталый: я должен был сделать это:

   int di = 0;

    PolyOverlay(int n) {
        di = n;
    }

в моем классе PolyOvelay, а затем передать ему "i" из цикла xml for ...

PolyOverlay myPolyOverlay = new PolyOverlay (i);

mapView.getOverlays (). Add (myPolyOverlay);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...