android RelativeLayout视图(用于数据)出现在地图弹出窗口之外(来自点击事件)

时间:2013-05-23 09:37:42

标签: android arcgis

首先,抱歉布局不佳,这是我第一次提问。我已就此问题进行了搜索,但无法找到解决方案。

现在,对于我的项目,我必须在地图对象上添加标识。它工作正常,我可以得到我想要获得的结果。但是,当我想在视图上显示标识任务的结果时,会出现问题。

我在XML文件中设置了RelativeLayout样式,这里是片段。由于不相关,我删除了很大一部分。布局包含4个字段,我将只显示其中一个

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/basic"
tools:context=".HelloWorldActivity" >

<com.esri.android.map.MapView
    android:id="@+id/map"
    style="@style/basic"
    initExtent = "-1849.3798815878108 139037.2620862738 219078.1453067956 241431.21687418327">
</com.esri.android.map.MapView>

<RelativeLayout
    android:id="@+id/objectInfo"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    style="@style/objectInfo" >

    <TextView
        android:id="@+id/labelStatus"
        style="@style/labelProperty"
        android:text="@string/labelStatus" />

    <TextView
        android:id="@+id/status"
        style="@style/textObjectInfo"
        android:layout_toRightOf="@id/labelStatus"
        android:text="@string/status" />
</RelativeLayout>
</RelativeLayout>

现在,我正在使用一个自定义类,它从IdentifyResultSpinnerAdapter扩展而来。目的是使用View-content进行回调(使用异步任务处理Identify)。下面是我用来返回View对象的方法;

        RelativeLayout layout = (RelativeLayout) mainThread.findViewById(R.id.objectInfo);
    // set textview
    TextView txt;

    // set naam
    txt = (TextView)layout.findViewById(R.id.status);
    if(curResult.getAttributes().containsKey("status")){
        txt.setText(curResult.getAttributes().get("status").toString());    
    }
    else txt.setText("N/A");
    // **1

    layout.invalidate();
    layout.setVisibility(View.VISIBLE);
    return layout;

(** 1如上所述,仅显示一个更改,其他3个字段以相同方式处理) 然后在主要活动类中;

/**
* this method handles the result after tap event and displays it on the map
* @param p the point where the tap event got recorded
* @param v the view result
* @see IdentifyTaskManager
*/
public void handleResults(Point p, ViewGroup v) {
    mMapView.getCallout().show(p, v);
}

下一张图显示了上述代码的结果。 (呃,图像显示需要10个重复点,here is the URL

正如您所看到的,RelativeLayout窗口(橙色)显示为停留在该位置的静态布局,无论我在地图上点击哪个对象。弹出窗口显示为空,因为布局不会在那里产生。

是否知道问题是什么,或者是什么导致这种影响? 谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我决定深入研究View / RelativeLayout文档并遇到LayoutInflater类。感谢这两个链接,this question on stackovervlowthis blog我可以找到解决方案。

首先,我将xml布局移动到一个名为popupwindow.xml

的单独文件中

其次,使用LayoutInflater类(变量mainThread是对从Activity扩展的主类的引用 - 需要获取上下文信息);

View view = null;
try {
    LayoutInflater inflater = LayoutInflater.from(mainThread.getBaseContext());
    view = inflater.inflate(R.layout.popupwindow, null); // get info from popupwindow.xml
}
catch (Exception e) {
    Log.d(null, "159 - error after inflater : " + e.getMessage());
}
// return null if inflater fails;
if (view == null) return null;

// set textview
TextView txt;

// set status
txt = (TextView)layout.findViewById(R.id.status);
if(curResult.getAttributes().containsKey("status")){
    txt.setText(curResult.getAttributes().get("status").toString());    
}
// return view
return view;

我很高兴: - )