Android MapView - Расширение OverlayItem для хранения URL для доступа в onTap - PullRequest
2 голосов
/ 16 ноября 2011

[Обновление: благодаря предложению Крэйги, приведенному ниже, я немного очистил свой код и добавил 'final' перед строкой в ​​onTap, и все прекрасно работает!]

Я пытаюсь сохранить URL(вместе с заголовком и фрагментом) в пользовательском элементе OverlayItem в виде карты моего приложения.Когда пользователь нажимает на OverlayItem (в моем случае это NewsMapItem), я хочу, чтобы всплыло диалоговое окно с заголовком и описанием.Ниже расположены кнопки «Открыть» и «Отклонить».Когда пользователь нажимает кнопку «Открыть», я хотел бы получить доступ к URL-адресу, сохраненному в NewsMapItem, и загрузить его в 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, но я хотел бы показать заголовок и описание вдиалоговое окно, чтобы пользователь мог выбирать, открывать ли историю более легко.

1 Ответ

1 голос
/ 16 ноября 2011

Вы можете получить доступ к переменным из внутреннего класса в Java, только если переменные объявлены как final (что делает их константами).Дополнительная информация

Невозможно обратиться к неконечной переменной внутри внутреннего класса, определенного в другом методе

, поэтому попробуйте поставить final перед объявлениемпеременные, на которые он жалуется, или используйте Eclipse-code-complete, чтобы сделать это для вас.

...