2011-11-16 2 views
2

[アップデート:下のCraigyの提案のおかげで、コードを少しきれいにしてonTapの文字列の前に「final」を追加しました!]Android MapView - onTapにアクセスするためのURLを格納するためにOverlayItemを拡張する

私は、アプリケーションのマップビュー上のカスタムオーバーレイアイテムにURL(タイトルとスニペットと共に)を保存しようとしています。ユーザーがOverlayItem(私の場合はNewsMapItem)をタップすると、タイトルと説明がダイアログに表示されます。その下には、「開く」と「解除」ボタンがあります。ユーザーが[開く]ボタンをタップすると、私はNewsMapItemに格納されているURLにアクセスしてWebViewにロードしたいと思います。 - 私は、リンクを追加したいと思います(ポイントに加えてタイトルを、デフォルトOverlayItemクラスで提供されるスニペット)

NewsMapItem:

下記の関連するコードスニペットを参照してください。

private class NewsMapItem extends OverlayItem { 
    private String mLink; 
    public NewsMapItem(GeoPoint point, String title, String snippet, String mLink) { 
     super(point, title, snippet); 
     this.mLink = mLink; 
    } 
    public String getLink() { 
     return mLink; 
    } 
} 

ONTAPオーバーライド(ItemizedOverlayを拡張する私のクラスの内側):アイテムのアクセサは、赤い下線、およびEclipseは「内部クラス内で非final変数項目を参照することはできません私に語っている

@Override 
    protected boolean onTap(int index) { 
     NewsMapItem item = overlays.get(index); 
     AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
     dialog.setTitle(item.getTitle()); 
     dialog.setMessage(item.getSnippet()); 

     // Added the line below... 
     final String url = item.getLink(); 

     dialog.setCancelable(true); 
     dialog.setPositiveButton(R.string.mapview_open, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 

       // Removed this call... 
       // String url = item.getLink(); 

       Intent showContent = new Intent(getApplicationContext(), JJGWebViewActivity.class); 
       showContent.setData(Uri.parse(url)); 
       startActivity(showContent); 
      } 
     }); 
     dialog.setNegativeButton(R.string.mapview_dismiss, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }); 
     dialog.show(); 
     return true; 
    } 

別の方法で定義されています。

何か助けが必要ですか、それとも私がやっていることをする良い方法がありますか?

わかりやすくするために、スニペットを一切表示せずにそこにURLを格納することはできませんでしたが、ダイアログにタイトルと説明を表示して、もっと簡単にストーリー。

答えて

1

変数がfinal(それらを定数にする)として宣言されている場合、Javaの内部クラスからの変数にのみアクセスできます。詳しい情報

Cannot refer to a non-final variable inside an inner class defined in a different method

ので、それは文句を言うの変数の宣言の前にfinalを入れてみてください、またはあなたのためにそれを行うには、Eclipseのコード補完を使用します。

+0

まさに私がする必要があった。ありがとう! – geerlingguy

関連する問題