如何在字符串列表中更改信息窗口中的textview文本

时间:2016-04-15 13:30:37

标签: android google-maps google-maps-markers android-maps-v2 infowindow

当我的MapActivity打开时,我从我的Firebase数据库中请求包含某些酒店的这些数据的一些信息,之后它会创建带有加载数据的标记..我尝试使用片段,但如果我的评论太长,则不能显示..

    @Override
    public void onLoaded(String name, double lat, double lon, String author, float foodRating,float serviceRating,float comfortRating,float averageRating, String review) {
        reviewList.add(review);

        LatLng position = new LatLng(lat, lon);
        marker = mGoogleMap.addMarker(new MarkerOptions().title(name)
                .position(position)
                .snippet("REVIEW: \n" + review + "\n").snippet(String.valueOf(averageRating)));
    }

所以,我用它的方法实现了InfoAdapter监听器:

    @Override
    public View getInfoWindow(Marker marker) {
        View view = LayoutInflater.from(this).inflate(R.layout.info_window, null, false);
        TextView reviewTextView = (TextView) view.findViewById(R.id.review);
        reviewTextView.setText("");
        return view;
    }

现在我想在每次单击不同的标记时更改reviewTextView中的文本,以显示每个标记(每个酒店的)评论......

我尝试将onLoaded方法中的所有评论存储到名为reviewList的ArrayList中,但现在我不确定如何为某个标记提取这些评论..

1 个答案:

答案 0 :(得分:0)

使用Map代替ArrayList,并使用Map s'将评论放入onLoaded()方法中的Marker。 ID作为键。在getInfoWindow()方法中,从Map检索审核,其中包含传递的Marker ID。

private Map<String, String> reviewMap = new HashMap<>();
...

@Override
public void onLoaded(String name, double lat, double lon, String author,
                     float foodRating, float serviceRating, float comfortRating,
                     float averageRating, String review) {

    LatLng position = new LatLng(lat, lon);
    marker = mGoogleMap.addMarker(new MarkerOptions().title(name)
                                  .position(position)
                                  .snippet("REVIEW: \n" + review + "\n")
                                  .snippet(String.valueOf(averageRating)));

    reviewMap.put(marker.getId(), review);
}
...

@Override
public View getInfoWindow(Marker marker) {
    View view = LayoutInflater.from(this).inflate(R.layout.info_window, null, false);
    TextView reviewTextView = (TextView) view.findViewById(R.id.review);
    String review = reviewMap.get(marker.getId());
    reviewTextView.setText(review);
    return view;
}