尝试从JSON获取Linearlayout的正确内容,但每次都获得相同的内容

时间:2017-04-12 20:49:11

标签: android json parsing

我尝试为我的地图活动添加一种“预览”。在此活动中应显示标记的名称和后来的地址(在json中设置)。不幸的是,我没有为所选标记获得正确的内容。我只是得到其中一个项目的内容。这是我的代码:

f = int(input("Enter numbers to add products"))
n = open("testfile.txt","r")
print(f + int(n.read()))

}

2 个答案:

答案 0 :(得分:0)

你在循环中调用setOnMarkerClickListener。因为这是整个地图的setter,所以每次都会覆盖监听器。因此,我希望您始终能够看到最后联系人的信息。相反,您应该只将此方法称为一次。在for循环中

现在,您已经注意到您无法访问您的联系人对象。您必须使用传递给点击事件的标记来选择正确的联系人。您已将标记的标题设置为联系人的姓名,因此您应该可以将其从标记中拉出来并使用它来找到正确的联系人。

类似的东西:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                String name = marker.getTitle();
                HashMap<String, String> currContact = contactList.stream().filter(c -> c.get("name").equals(name)).findFirst().get();
                LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
                prev.setVisibility(View.VISIBLE);
                TextView nameprev = (TextView) findViewById(R.id.namepre);

                nameprev.setText(currContact.get("name"));
                Toast.makeText(getApplicationContext(),currContact.get("name"),Toast.LENGTH_LONG).show();
                return false;


            }
        });

如果在Marker标记中保存对整个联系人的引用,可能会更简单。

Marker marker = mMap.addMarker(new MarkerOptions().position(P1).title(contact.get("name")));
marker.setTag(contact);

然后,如果您能够将整个对象拉出而不仅仅是名称:

HashMap<String, String> currContact = (HashMap<>) marker.getTag();

答案 1 :(得分:0)

mMap.setOnMarkerClickListener()mMap.setOnMapClickListener()添加到onCreate()方法:

    @Override
    protected void onCreate( Bundle savedInstanceState) {
        ................
        .........................

        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {

                LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
                prev.setVisibility(View.VISIBLE);
                TextView nameprev = (TextView) findViewById(R.id.namepre);

                nameprev.setText(contact.get("name"));
                Toast.makeText(getApplicationContext(),contact.get("name"),Toast.LENGTH_LONG).show();
                return false;


            }
        });

        mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
                prev.setVisibility(View.INVISIBLE);
                TextView nameprev = (TextView) findViewById(R.id.namepre);
                nameprev.setText("Clubname");
            }
        });
    }

更新onPostExecute(),如下所示:

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);

    for (final HashMap<String, String> contact: contactList) {

        LatLng P1 = new LatLng(Double.parseDouble(contact.get("lat")),
                               Double.parseDouble(contact.get("lng")));

        mMap.addMarker(new MarkerOptions().position(P1).title(contact.get("name")));

    }
}