[更新:感谢Craigy在下面提出的建议,我稍微清理了我的代码并在onTap中的字符串之前添加了'final',一切都很棒!]
我正在尝试将URL(以及标题和代码段)存储在我应用的mapview上的自定义OverlayItem中。当用户点击OverlayItem(在我的情况下,是一个NewsMapItem)时,我想要一个弹出标题和描述的对话框。在此之下,有“打开”和“关闭”按钮。当用户点击“打开”按钮时,我想访问存储在NewsMapItem中的URL并将其加载到WebView中。
请参阅以下相关代码段:
NewsMapItem - 我想添加一个链接(除了默认的OverlayItem类提供的point,title和snippet)。
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存储在那里,但我想在对话框中显示标题和说明,以便用户可以选择是否打开故事更容易。
答案 0 :(得分:1)
如果变量声明为final
(使它们成为常量),则只能从Java中的内部类访问变量。更多信息
Cannot refer to a non-final variable inside an inner class defined in a different method
所以尝试将final
放在它所抱怨的变量声明之前,或者使用Eclipse代码完成为你做。