2011-11-16 3 views
2

[Обновление: спасибо предложению Craigy ниже, я немного очистил свой код и добавил «final» перед строкой в ​​onTap, и все отлично работает!]Android MapView - расширение OverlayItem для хранения URL-адреса для доступа в 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

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

Cannot refer to a non-final variable inside an inner class defined in a different method

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

+0

Точно, что мне нужно было сделать. Благодаря! – geerlingguy