5

BingMapsで問題が発生していEntityClickedListenerます。私は与えられた例に従ってそれをコーディングしました:

map.setEntityClickedListener(new EntityClickedListener()
{
   @Override
   public void onAvailableChecked(String layerName, int entityId)
   {
      HashMap<String, Object> metadata = map.getLayerManager.GetMetadataByID(layerName, entityId);
      Toast.makeText(Activity.this, metadata.toString(), Toast.LENGTH_LONG)
           .show();
   }
});

ただし、をクリックしてPushpinも何も起こりません。メタデータの内容を正確に確認するためにトーストメッセージを作成しましたが、何も起こりません。アプリケーションのパスを見ると、Bingがデータサービスを使用して情報を取得していることがわかります。

bsds.FindByAreaCompleted = new Handler(){
     public void handleMessage(Message msg) {
     if(msg.obj != null){
        Record[] records = (Record[])msg.obj;
        EntityLayer el = (EntityLayer)bingMapsView.getLayerManager().getLayerByName(Constants.DataLayers.Search);
        double maxLat = -90, minLat = 90, maxLon = -180, minLon = 180;

        for(Record r : records){
            Pushpin p = new Pushpin(r.Location);
            p.Title = r.DisplayName;
            HashMap<String, Object> metadata = new HashMap<String, Object>();
            metadata.put("record", r);
            el.add(p, metadata);
        }

     bingMapsView.setMapView(new LocationRect(maxLat, maxLon, minLat, minLon));

     el.updateLayer();
     }
};

また、JavaScriptファイルを編集してListener、動作を妨げている可能性のあるチェックをいくつか削除しました。

this.ShowInfobox = function(entity){
        window.BingMapsInterlop.entityClicked(entity.layerName, entityId);
    };

var Layer = function(name, map, dataLayer)
{
    this.Name = name;

    var entities = new MM.EntityCollection(),
    _map = map;

    this.AddEntities = function(data)
    {
        if(data != null)
        {
            var i = data.length - 1;
            if (i >= 0)
            {
                do
                {
                    data[i].Entity.entityId = data[i].EntityId;
                    data[i].Entity.layerName = name;

                    // Commented out
                    // if(data[i].title != null && data[i].title != undefined && data[i].title != '')
                    // {
                        data[i].Entity.title = data[i].title;

                        MM.Events.addHandler(data[i].Entity, 'click', function(e)
                        {
                            BingMapsAndroid.ShowInfobox(e.target);
                        });
                    // }
                    entities.push(data[i].Entity);
                }
                while (i--)
            }
        }
    };
    // fluff
};

JavaScriptファイルを正しく編集しましたか?私自身はJavaScriptを知らないので、このガイドに従っています。Pushpinが追加されて表示されていますBingMapsViewが、OnClickメソッドが実行されません。足りないものはありますか?

Bingがクリックイベントのリスナーとイベントを作成するためにたどるパスPushpinは、私の意見ではほとんど迷路です。私が欠けているこれを行うためのより簡単な方法がなければなりません。誰かアドバイスはありますか?

4

1 に答える 1

2

私はついに答えを見つけました!スクリプトが存在しないメタデータをチェックしないように、JavaScriptファイルで次のメソッドを編集します。

var Layer = function(name, map, dataLayer)
{
    this.Name = name;

    var entities = new MM.EntityCollection(),
    _map = map;

    this.AddEntities = function(data)
    {
        if(data != null)
        {
            var i = data.length - 1;
            if (i >= 0)
            {
                do
                {
                    data[i].Entity.entityId = data[i].EntityId;
                    data[i].Entity.layerName = name;

                    // Commented out
                    // if(data[i].title != null && data[i].title != undefined && data[i].title != '')
                    // {
                        data[i].Entity.title = data[i].title;

                        MM.Events.addHandler(data[i].Entity, 'click', function(e)
                        {
                            BingMapsAndroid.ShowInfobox(e.target);
                        });
                    // }
                    entities.push(data[i].Entity);
                }
                while (i--)
            }
        }
    };
    // fluff
};

次に、ShowInfoBoxJavaScriptファイルのメソッドを次のように変更します。

this.ShowInfobox = function (entity) {
        window.BingMapsInterlop.entityClicked(entity.layerName, entity.entityId);
    };

このコードActivityは、JavaScriptでいじくり回すのではなく、コーディングしたクリックリスナーに直接到達します。以前に編集したJavaScriptとの違いは、entityClickedメソッドのパラメーターは実際にはそうでentity.entityIdはないということentityIdです。

于 2012-07-12T17:54:34.217 に答える