1

初めて質問するのでレイアウトが悪くてすみません。この問題について検索を行いましたが、解決策が見つかりませんでした。

さて、私のプロジェクトでは、マップ オブジェクトに ID を追加する必要があります。それは正常に動作し、取得したい結果を得ることができます。しかし、識別タスクの結果をビューに表示したいときに問題が発生します。

XML ファイルで RelativeLayout のスタイルを設定しました。これがスニペットです。関係ないのでかなりの部分を削除しました。レイアウトには 4 つのフィールドが含まれています。そのうちの 1 つだけを表示します

<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 と述べたように、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 担当者ポイントが必要です。URL は次のとおりです。

ご覧のとおり、RelativeLayout ウィンドウ (オレンジ色) は、マップ上のどのオブジェクトをタップしても、その場所にとどまる静的レイアウトとして表示されます。レイアウトがそこにないため、ポップアップ ウィンドウは空として表示されます。

問題が何であるか、またはこの影響を引き起こす可能性のある何かを知っている人はいますか? ありがとうございました。

4

1 に答える 1

0

私は解決策を見つけました。View / RelativeLayout のドキュメントを掘り下げることにし、LayoutInflater クラスに出会いました。両方のリンク、 stackovervlow に関するこの質問、およびこのブログのおかげで、解決策を見つけることができました。

まず、xml レイアウトを popupwindow.xml という別のファイルに移動しました。

次に、LayoutInflater クラスを使用します (変数 mainThread は、アクティビティから拡張されたメイン クラスへの参照です - コンテキスト情報を取得するために必要です)。

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;

私は幸せです:-)

于 2013-05-23T19:27:44.363 に答える