【发布时间】:2013-11-27 07:28:47
【问题描述】:
我正在编写一个 android 应用程序来使用 Google Places API 查看附近的位置,我的应用程序包含两个活动,第一个活动找到附近的位置,将有关这些位置的信息存储在 HashMap 中,并将它们显示在地图上。 在第二个活动中,我想从第一个活动的 HashMap 中获取位置名称并将它们显示在 ListView 中。
第一个活动:
HashMap<String, String> hmPlace;
protected void onPostExecute(List> list){
// Clears all the existing markers
mGoogleMap.clear();
for(int i=0;i<list.size();i++){
// Creating a marker
MarkerOptions markerOptions = new MarkerOptions();
// Getting a place from the places list
//HashMap<String, String>
hmPlace = list.get(i);
// Getting latitude of the place
double lat = Double.parseDouble(hmPlace.get("lat"));
// Getting longitude of the place
double lng = Double.parseDouble(hmPlace.get("lng"));
// Getting name
String name = hmPlace.get("place_name");
// listP[i]=hmPlace.get("place_name");
Log.d("places=",hmPlace.get("place_name"));
// Getting vicinity
String vicinity = hmPlace.get("vicinity");
LatLng latLng = new LatLng(lat, lng);
// Setting the position for the marker
markerOptions.position(latLng);
// Setting the title for the marker.
//This will be displayed on taping the marker
markerOptions.title(name + " : " + vicinity);
// Placing a marker on the touched position
Marker m = mGoogleMap.addMarker(markerOptions);
// Linking Marker id and place reference
mMarkerPlaceLink.put(m.getId(), hmPlace.get("reference"));
}
}
我是这样传递HashMap的:
intent = new Intent(getApplicationContext(), List_airports.class);
intent.putExtra("com.example.dashboard_our.hmPlace",hmPlace);
startActivity(intent);
我在第二个活动中从 HashMap 中获取值:
final ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < places1.size(); ++i) {
list.addAll(places1.values());
}
places1 是我从另一个活动中获得的 HashMap:
HashMap<String, String> places1=(HashMap<String, String>) extras.getSerializable("com.example.dashboard_our.hmPlace");
但它只带第一个元素并打印多次
这是第二个活动的其余部分:
final StableArrayAdapter adapter = new StableArrayAdapter(this,
android.R.layout.simple_list_item_1, list);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
view.animate().setDuration(2000).alpha(0)
.withEndAction(new Runnable() {
@Override
public void run() {
list.remove(item);
adapter.notifyDataSetChanged();
view.setAlpha(1);
}
});
}
});
}
private class StableArrayAdapter extends ArrayAdapter<String> {
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
public StableArrayAdapter(Context context, int textViewResourceId,
List<String> objects) {
super(context, textViewResourceId, objects);
for (int i = 0; i < objects.size(); ++i) {
mIdMap.put(objects.get(i), i);
}
}
@Override
public long getItemId(int position) {
String item = getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
}
【问题讨论】:
-
从intent获取数组列表的代码在哪里???
-
你知道数据控制器类老兄保存该类中的所有数据并在任何地方使用它
-
这里
hmPlace是什么,你发送的hmPlace不是完整的Hashmap -
不要只是这样传递数据,当有这么多的活动一起交互时,您将失去所有控制:(
-
@BhanuSharma 我该怎么做?