首先,抱歉布局不佳,这是我第一次提问。我已就此问题进行了搜索,但无法找到解决方案。
现在,对于我的项目,我必须在地图对象上添加标识。它工作正常,我可以得到我想要获得的结果。但是,当我想在视图上显示标识任务的结果时,会出现问题。
我在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窗口(橙色)显示为停留在该位置的静态布局,无论我在地图上点击哪个对象。弹出窗口显示为空,因为布局不会在那里产生。
是否知道问题是什么,或者是什么导致这种影响? 谢谢。
答案 0 :(得分:0)
我找到了解决方案。我决定深入研究View / RelativeLayout文档并遇到LayoutInflater类。感谢这两个链接,this question on stackovervlow和this 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;
我很高兴: - )