0

我有以下问题:

我有一个对象数组列表,我希望为其创建标记并为每个标记的信息窗口填充一些数据。

private ArrayList<Ad> _items = new ArrayList<Ad>();

这是从包含该信息的 aa 数据库中填充的。

我对 java 和 android 开发有点陌生,所以我对找到解决方案有点困惑。

我正在考虑创建一个HashMap<Marker , Ad>

但我真的不知道这是否是最好的解决方案,或者如何实施。

有任何想法吗?

谢谢你。

4

1 回答 1

0

我目前正在开发地图应用程序,我实施的最佳解决方案是:

1)创建一个执行以下操作的 AsyncTask: a)从您的数据库中检索数据 - 例如。位置、图标、名称、Snipper 等 b) 然后创建标记

c) 添加标记。

所有这一切都会创建一个新的工作线程(它在后台运行 - 与您的 UI 线程分开),因此如果您有一个大型数据库并且需要添加 100 个(如果不是 1000 个)标记,则可能需要几分钟并且您不想在 UI 线程上执行此操作,因为它将被阻止。

如果您需要帮助,请告诉我。

编辑

在您的Activity中,像这样调用新任务:

您可以根据需要将任意数量的参数传递给 AsyncTask。它们可以是任何类型的对象。例如。字符串、整数、映射。

对于“地图”,请传递您GoogleMap map = (GoogleMap) findViewById(...);对它的引用

new AddMarkersAsyncTask(getApplicationContext()).execute(map, param1, param2, etc...);

您的 AsyncTask 应如下所示:AddMarkersAsyncTask.class

public class AddMarkersAsyncTask  extends AsyncTask<Object, Void, Void> {

    static Context mContext;

    public AddMarkersAsyncTask(Context mContext) {
        this.mContext = mContext;
    }

    @Override
    protected Void doInBackground(Object... params) {

        // Here you retrieve all the params like this
        // You will need to add Cast to each param as they are all passed as generic object.
        GoogleMap map = (GoogleMap) params[0];
        String[] a = (String[]) params[1];
        int airport_marker_w = (Integer) params[2];
        int airport_marker_h = (Integer) params[3];
        ... etc etc

        // Here retrieve all your database data

        String tile = "Title";
        String snippet = "Snippet";
        Bitmap icon = BitmapFactory.decodeFromResource(R.drawable.my_marker);
        LatLnt position = <SomePosition>;

        // If your array list or length of markers is say 50 markers, do a for loop with either i < listname.length or i < listname.size() or i < 50, etc etc

        for(int i=0; i < a.length; i++) {
            new AddMarker(mContext).addMarker(map, title, snippet, icon, position);
        }
        return null;
    }
}

然后创建另一个类 AddMarker:AddMarker.class

public class AddMarker {

    static Context mContext;
    public AddMarker(Context mContext) {
        this.mContext = mContext;
    }

    public int addMarker(final GoogleMap map,String title, String snippet, Bitmap icon) {
        final MarkerOptions opts = new MarkerOptions();
        Handler handler = new Handler(Looper.getMainLooper());

        opts.title(title);
        opts.snippet(snippet);
        opts.position(position);
        opts.icon(icon);
        handler.post(new Runnable() {
            public void run() {
                map.addMarker(opts);
            }
        });
    }
}

希望这能让您知道该怎么做:) 如果您需要更多帮助,请告诉我

于 2013-08-21T08:14:05.130 回答