2

[更新:感谢 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 存储在其中,但我想在对话框中显示标题和描述,以便用户可以更轻松地选择是否打开故事。

4

1 回答 1

1

final如果变量被声明为(使它们成为常量),则只能从 Java 中的内部类访问变量。更多信息

不能引用在不同方法中定义的内部类中的非最终变量

所以试着把final它抱怨的变量的声明放在前面,或者使用 Eclipse 代码完成来为你做这件事。

于 2011-11-16T17:19:42.423 回答