2014-02-16 3 views
0

Я разрабатываю приложение для Android, в том числе проведите пальцем по экрану с вкладкой. У всех страниц был свой собственный макет, все это отлично работает: D.Как добавить MapView в действие, у которого уже есть «продолжения»?

Но я хочу добавить к одному из этих представлений MapView (из API Google), поэтому мне нужно расширить мою MainActivity (единственную, что у меня есть), к MapActivity, но я не могу (здесь нет ничего плохого):

public class MainActivity extends ActionBarActivity implements ActionBar.TabListener{ 

так что есть способ управлять моим MapView от MainActivity?

Большое спасибо :)

(простите за мой плохой английский синтаксис)

+0

В Maps V2 отсутствует «MapActivity». – CommonsWare

ответ

0

Ответ: нет. Невозможно использовать MapView без расширения MapActivity. Как указал gulbrandr, есть аналогичный вопрос here, это может быть полезно для тех, кто пытается сделать то же самое, что и я.

+0

Так что я могу использовать MapFragment? Большое спасибо, я тестирую это прямо сейчас :) –

+1

'MapActivity' для Maps V1, который устарел на протяжении ~ 16 месяцев и больше не может использоваться для новой разработки. Карты V2, текущий API карт, вообще не имеют «MapActivity», не говоря уже о необходимости использовать его. – CommonsWare

3

Часто, когда вы сталкиваетесь с проблемой вроде этого, вам нужно посмотреть на инкапсуляцию, а не на расширение. Не можете ли вы использовать MapView в качестве переменной-члена?

Если вы отметили MapView API, в нем говорится, что мы должны реализовать жизненный цикл Android для MapView, чтобы он функционировал должным образом. Таким образом, если вы используете MapView как переменные, необходимо переопределить следующие методы в своей основной деятельности, чтобы вызвать методы сопоставления в MapView:

onCreate(Bundle) 
onResume() 
onPause() 
onDestroy() 
onSaveInstanceState(Bundle) 
onLowMemory() 

В качестве примера, ваша активность будет выглядеть следующим образом :

public final class MainActivity extends Activity { 

    private MapView mMapView; 

    @Override 
    public final void onCreate(final Bundle pSavedInstanceState) { 
      super(pSavedInstanceState); 
      this.mMapView = new MapView(this); 
      /* Now delegate the event to the MapView. */ 
      this.mMapView.onCreate(pSavedInstanceState); 
    } 

    @Override 
    public final void onResume() { 
      super.onResume(); 
      this.getMapView().onResume(); 
    } 

    @Override 
    public final void onPause() { 
      super.onPause(); 
      this.getMapView().onPause(); 
    } 

    @Override 
    public final void onDestroy() { 
      super.onDestroy(); 
      this.getMapView().onDestroy(); 
    } 

    @Override 
    public final void onSaveInstanceState(final Bundle pSavedInstanceState) { 
      super.onSaveInstanceState(pSavedInstanceState); 
      this.getMapView().onSaveInstanceState(pSavedInstanceState); 
    } 

    @Override 
    public final void onLowMemory() { 
      super.onLowMemory(); 
      this.getMapView().onLowMemory(); 
    } 

    private final MapView getMapView() { 
      return this.mMapView; 
    } 

} 
+0

благодарит за ответ, но я думаю, что это немного сложно для меня, я действительно не вижу, что я должен делать ... :( –

+0

Я немного скорректировал код. Надеюсь, это поможет. –

+0

Отличная работа. Но только на моем первом представлении (на первой странице), но не на моей второй странице (авария) с тем же макетом :( –

Смежные вопросы