如何从字符串列表更改信息窗口中的文本视图文本

Posted

技术标签:

【中文标题】如何从字符串列表更改信息窗口中的文本视图文本【英文标题】:how to change textview's text in info window, from list of Strings 【发布时间】:2016-08-07 12:15:05 【问题描述】:

当我的 MapActivity 打开时,我从我的 Firebase 数据库中请求一些信息,其中包含某些酒店的这些数据,然后它使用加载的数据创建标记。我尝试使用 sn-p,但如果我的评论太长,它无法显示..

    @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】:

使用Map 而不是ArrayList,并将评论放入onLoaded() 方法中的Map 中,使用Markers 的ID 作为键。在getInfoWindow()方法中,通过传入Marker的ID从Map检索评论。

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;

【讨论】:

Tnx 迈克!我只需要将 reviewMap 更改为 Map reviewMap = new HashMap();因为marker.getId();是一个字符串值 哎呀,是的,你是对的。猜猜我看课程摘要的距离不够近。对不起。很高兴你弄明白了。干杯!

以上是关于如何从字符串列表更改信息窗口中的文本视图文本的主要内容,如果未能解决你的问题,请参考以下文章

如何更改列表视图的文本大小

如何将文本框中的字符串添加到另一个窗口中的列表视图

单击时将所有项目从列表视图转移到文本视图

如何使用随机数和列表更改 TextLabel 的文本?

从对象的 ArrayList 中获取字符串以用于自动完成文本视图

文本超出 Qt 中的列表视图范围