2015-06-17 20 views
0

我知道这里有一些类似的问题,但我还没有看到有这个确切问题的问题。我有ViewPager,我有MapsActivity.java,它延伸FragmentActivity。一个标签我想成为listView另一个标签将会是地图。使用FragmentPagerAdapter里面的FragmentActivity地图

目前适配器接受Fragment但不是FragmentActivity这就是地图。我需要知道最好的方法,因为我目前的设置如何让标签内的地图。它在自己的活动的标签之外自行工作,但那不是我想要的地方。我不想使用MapView,因为它们太旧了。我正在努力使自己的发展尽可能现代化。

这里是适配器和在那里我建立了ViewPager内的MainActivity.java

private void setupViewPager(ViewPager viewPager) { 
    Adapter adapter = new Adapter(getSupportFragmentManager()); 
    adapter.addFragment(new ListFragment(), "Events"); 
    adapter.addFragment(new ListFragment(), "Map"); 
    //where I want to add the MapsActivity^ 
    viewPager.setAdapter(adapter); 
} 

static class Adapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragments = new ArrayList<>(); 
    private final List<String> mFragmentTitles = new ArrayList<>(); 

    public Adapter(FragmentManager fm) { 
     super(fm); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragments.add(fragment); 
     mFragmentTitles.add(title); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragments.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitles.get(position); 
    } 
} 

这里是准系统MapsActivity.java我想要得到的标签内:

public class MapsActivity extends FragmentActivity { 

    private GoogleMap mMap; // Might be null if Google Play services APK is not available. 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     setUpMapIfNeeded(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); 
    } 
    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (mMap == null) { 
      // Try to obtain the map from the SupportMapFragment. 
      mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 
      // Check if we were successful in obtaining the map. 
      if (mMap != null) { 
       setUpMap(); 
      } 
     } 
    } 

    private void setUpMap() { 
     mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
    } 
} 

我试图从刚刚延长Fragment吨改变ListFragment.java姑娘o FragmentActivity,然后是适配器使用的类型。以及List<FragmentActivity> mFragments,但我遇到了与getItem()的麻烦。

一旦我作出了上述变化,像这样:

@Override 
    public FragmentActivity getItem(int position) { 
     return mFragments.get(position); 
    } 

有不兼容类型的冲突。 getItem(position) from ... MainActivity.AdaptergetItem(position)发生冲突从... support.FragmentPagerAdapter

请在此选项卡内显示/建议我以最佳方式获取此地图FragmentActivity。

回答

1

您不能在ViewPager中使用活动。活动可以包含视图,但视图不能包含活动。

第一步是将您的地图代码完全封装在一个片段中。好消息是你非常接近 - 你有一个MapFragment,你在活动中唯一真正做的就是添加一个标记。

将标记码移动到MapFragment的片段中,并在FragmentPagerAdapter中使用您的MapFragment

+0

感谢您的回复,并承担着我,因为我还是地图新手。所以你建议我创建一个新的类,例如_Map.java_。在那个类的内部,我需要'onCreate'等,然后所有的地图函数都会在那里发生?然后回到_MapsActivity.java_中,我会抛弃'setUpMap'和'setUpMapIfNeeded'方法,但是保留'onCreate' /'onResume'方法? – erp

+0

几乎 - 我说完全抛弃'MapsActivity',因为你不能在你的ViewPager中使用它。你基本上用一个扩展了'MapFragment'的新类来代替你的'MapsActivity', –

+0

好吧,当我尝试这个时,我尝试添加'adapter.addFragment(new MapFrag(),“Map”)'我得到一个错误,它“找到了com.blah。MapFrag'但需要'android.support.v4.ap.Fragment'“ – erp

相关问题