[更新:感谢 Craigy 在下面的建议,我稍微清理了我的代码并在 onTap 中的字符串之前添加了“final”,一切都很好!]
我正在尝试将 URL(以及标题和片段)存储在我的应用程序地图视图上的自定义 OverlayItem 中。当用户点击 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 存储在其中,但我想在对话框中显示标题和描述,以便用户可以更轻松地选择是否打开故事。