我有以下问题:
我有一个对象数组列表,我希望为其创建标记并为每个标记的信息窗口填充一些数据。
private ArrayList<Ad> _items = new ArrayList<Ad>();
这是从包含该信息的 aa 数据库中填充的。
我对 java 和 android 开发有点陌生,所以我对找到解决方案有点困惑。
我正在考虑创建一个HashMap<Marker , Ad>
但我真的不知道这是否是最好的解决方案,或者如何实施。
有任何想法吗?
谢谢你。
我有以下问题:
我有一个对象数组列表,我希望为其创建标记并为每个标记的信息窗口填充一些数据。
private ArrayList<Ad> _items = new ArrayList<Ad>();
这是从包含该信息的 aa 数据库中填充的。
我对 java 和 android 开发有点陌生,所以我对找到解决方案有点困惑。
我正在考虑创建一个HashMap<Marker , Ad>
但我真的不知道这是否是最好的解决方案,或者如何实施。
有任何想法吗?
谢谢你。
我目前正在开发地图应用程序,我实施的最佳解决方案是:
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);
}
});
}
}
希望这能让您知道该怎么做:) 如果您需要更多帮助,请告诉我