2015-02-23 5 views
1

У меня есть несколько вопросов о ViewPager в андроиде студии,Добавление OpenStreetMap в ViewPager

Так я сделал ViewPager с 3-мя экранов с использованием ViewPager и класса PagerAdapter общественного класс MainActivity расширяет FragmentActivity {

private MapView myOpenMapView; 
private MapController myMapController; 
ExpandableListAdapter listAdapter; 
ExpandableListView expListView; 
List<String> listDataHeader; 
HashMap<String, List<String>> listDataChild; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    MyPagerAdapter adapter = new MyPagerAdapter(); 
    ViewPager myPager = (ViewPager) findViewById(R.id.viewpager_layout); 
    myPager.setAdapter(adapter); 
    myPager.setCurrentItem(1); 

    expListView = (ExpandableListView) findViewById(R.id.expandableListView2); 
    prepareListData(); 
    listAdapter = new ExpandableListAdapter(this,listDataHeader,listDataChild); 
} 
    public class MyPagerAdapter extends PagerAdapter { 
      public int getCount() { 
       return 3; 
      } 

      public Object instantiateItem(ViewGroup collection, int position) { 
       View view=null; 

       LayoutInflater inflater = (LayoutInflater) collection.getContext() 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       int resId = 0; 
       switch (position) { 
        case 0: 
         resId = R.layout.activity_friend; 
         view = inflater.inflate(resId, null); 
         break; 
        case 1: 
         resId = R.layout.fragment_main_page; 
         view = inflater.inflate(resId, null); 
         break; 
        case 2: 
         resId = R.layout.activity_map; 
         view = inflater.inflate(resId, null); 
         myOpenMapView = (MapView) findViewById(R.id.openmapview); 
         //myOpenMapView.setBuiltInZoomControls(true); 
         //myMapController = myOpenMapView.getController(); 
         //myMapController.setZoom(4); 
         //myOpenMapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 

         break; 
       } 
       ((ViewPager) collection).addView(view, 0); 
       return view; 
      } 

      @Override 
      public void destroyItem(ViewGroup arg0, int arg1, Object arg2) { 
       ((ViewPager) arg0).removeView((View) arg2); 
      } 

      @Override 
      public boolean isViewFromObject(View arg0, Object arg1) { 
       return arg0 == ((View) arg1); 
      } 

      //public boolean isViewFromObject(ViewGroup arg0, Object arg1) { 
      // return arg0 == ((View) arg1); 
      //} 
      @Override 
      public Parcelable saveState() { 
       return null; 
      } 
     } 

Это работает просто отлично, теперь в моем проекте я хочу реализовать OpenStreetMap, я добавил этот код

  myOpenMapView = (MapView) findViewById(R.id.openmapview); 
      myOpenMapView.setBuiltInZoomControls(true); 
      myMapController = myOpenMapView.getController(); 
      myMapController.setZoom(4); 
      myOpenMapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 

этот код работает отлично, если он помещен в отдельную деятельность, но по какой-либо причине, если он находится внутри oncreate в viewpager или внутри класса pageradapter, он не работает

Может кто-нибудь объяснить, почему он не работает и как я может это исправить?

ответ

1
    resId = R.layout.activity_map; 
        v = inflater.inflate(resId,null); 
        View map = v.findViewById(R.id.openmapview); 
        myOpenMapView = (MapView)map; 
        myOpenMapView.setBuiltInZoomControls(true); 
        myOpenMapView.setMultiTouchControls(true); 
        myOpenMapView.setClickable(true); 
        myMapController = myOpenMapView.getController(); 
        myMapController.setZoom(15); 
        myOpenMapView.getController().setCenter(
          new GeoPoint(MAP_LATITUDE, MAP_LONGITUDE)); 
        myOpenMapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 
        break; 

Так я понял это,

создать новый вид

View map = v.findViewById(R.id.openmapview); 

как таковой , но создать его из накачанной зрения

а затем заполнить карта с идентификатором, который вы только что приобрели

myOpenMapView = (MapView)map; 

Надеюсь, это поможет некоторым людям, столкнувшимся с одной и той же проблемой

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