从另一个活动android传递的HashMap数据填充listView

时间:2013-11-27 07:28:48

标签: android listview hashmap

我正在编写一个Android应用程序,使用Google Places API查看附近的位置,我的应用程序包含两个活动,第一个活动查找附近的位置,在HashMap中存储有关这些位置的信息,并在地图上显示它们。 在第二个活动中,我想从第一个活动中获取HashMap中的位置名称,并在ListView中显示它们。

第一项活动:

 HashMap<String, String> hmPlace;

protected void onPostExecute(List&gt; 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;
            }

          }

1 个答案:

答案 0 :(得分:0)

制作一个这样的datacontroller类

公共类DataController {

    private static DataController ref;

    public static DataController getInstance()
    {
        if(ref==null)
            ref = new DataController();

        return ref;
    }

public HashMap hashmap_datacntrlr = new HashMap();

}

从这个你得到一个singlton类,它在整个应用程序中只有一个实例现在你只需要使用你想要使用的任何数据类型并保存,就像我提到的hashmap现在只需这样做,你得到你的数据并保存在数据控制器中这个

DataController datacntrl;

in on create

datacntrl = DataController.getInstance();

和多余的hasmap如datacntrl.hashmap_datacntrlr = PASTE你的数据必须具有相同的数据;

现在在你的目标类中再次创建datacontoller实例和多余的数据并获取datacntrl.hashmap_datacntrlr,你想要显示你的数据

当我们使用旧数据而不是从服务器反复触发时,它的调用缓存一段时间:)

可能会帮助你实现目标 最好的运气DUDE:)