【问题标题】:MapView in a listView itemListView 项中的 MapView
【发布时间】:2012-07-24 03:01:04
【问题描述】:

我有一个带有 listView 的活动,其中每个项目都可以在单击时展开,显示一个 mapView。如果单击另一个项目,则打开的项目将关闭。 该活动扩展了 MapActivity,并且只有一个 mapview 实例,我根据需要将其删除并添加到项目中,如下所示:

private MapView getMapView() {
    if (mMapView == null) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mMapView = (MapView) inflater.inflate(R.layout.club_map,null);
    }
    else
    {
        ((ViewGroup) mMapView.getParent()).removeView(mMapView);
    }
    return mMapView;
}

private void attachMap(View targetView,String siteID) {
    if (openInPrgrs) {
        return;
    }
    RelativeLayout relView = (RelativeLayout) targetView.findViewById(R.id.clubDetailsLayout);
    LinearLayout mapContainer = (LinearLayout) relView.findViewById(R.id.mapContainer);
    UtilFunctions.logIfDebug("MembershipsList","Attaching Map. siteID " + siteID + " childCount = " + mapContainer.getChildCount());
    if (mapContainer.getChildCount() > 0 ) {
        return;
    }
    MapView mapView = getMapView();
    mapContainer.addView(mapView);
}

它在大多数情况下都可以正常工作,但是当屏幕关闭并重新打开时,或者打开的项目滚动离开屏幕并返回时,mapView 就会消失。 我知道这是因为视图正在被 listView 回收。如果我尝试在 getView() 中附加地图(如果视图处于打开位置):

public View getView(int position, View convertView,
                ViewGroup parent) {

            final View resultView = super.getView(position, convertView, parent);
            LayoutParams lp = resultView.getLayoutParams();
            if (curOpenPos == position) {

                LinearLayout mapContainer = (LinearLayout) resultView.findViewById(R.id.mapContainer);
                lp.height = item_height_open;
                attachMap(resultView, siteID);
            }

} 当项目完全展开时,地图会消失,但当屏幕关闭并打开时,它会出现。

有人知道为什么会发生这种情况,或者我能做些什么来解决它吗?

【问题讨论】:

  • 也许您可以考虑始终将单例 mapView 添加到您的 mapContainer,但要调整可见性。例如非选中行setVisibility(View.GONE),选中行setVisibility(View.VISIBLE)。这会改变行为吗?
  • 请参考此链接stackoverflow.com/questions/2961275/…希望对您有帮助

标签: android listview android-layout android-mapview mapactivity


【解决方案1】:

也许你可以实现一个 Holder 类。一个比将一个实例保存到您的 MapView 以便可以恢复它。

在最后一个示例中,HERE 展示了如何对其他视图执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多