[更新:以下のCraigyの提案のおかげで、コードを少しクリーンアップし、onTapの文字列の前に「final」を追加しました。すべてがうまく機能します!]
アプリのマップビューのカスタムOverlayItemにURLを(タイトルとスニペットとともに)保存しようとしています。ユーザーがOverlayItem(私の場合はNewsMapItem)をタップすると、タイトルと説明を含むダイアログがポップアップ表示されます。その下には、「開く」ボタンと「閉じる」ボタンがあります。ユーザーが[開く]ボタンをタップしたときに、NewsMapItemに保存されているURLにアクセスし、それをWebViewにロードしたいと思います。
以下の関連するコードスニペットを参照してください。
NewsMapItem-リンクを追加したい場所(デフォルトのOverlayItemクラスによって提供されるポイント、タイトル、およびスニペットに加えて)。
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を拡張するクラス内):
@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;
}
アイテムアクセサーには赤で下線が引かれ、Eclipseは「別のメソッドで定義された内部クラス内の非最終変数アイテムを参照することはできません」と言っています。
何か助けがありますか、それとも私が試していることを行うためのより良い方法がありますか?
わかりやすくするために、スニペットをまったく表示せず、そこにURLを保存することはできませんでしたが、ダイアログにタイトルと説明を表示して、ユーザーがストーリーをより簡単に開くかどうかを選択できるようにします。