我知道这里有一些类似的问题,但我还没有看到有这个确切问题的问题。我有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.Adapter与getItem(position)
发生冲突从... support.FragmentPagerAdapter。
请在此选项卡内显示/建议我以最佳方式获取此地图FragmentActivity。
感谢您的回复,并承担着我,因为我还是地图新手。所以你建议我创建一个新的类,例如_Map.java_。在那个类的内部,我需要'onCreate'等,然后所有的地图函数都会在那里发生?然后回到_MapsActivity.java_中,我会抛弃'setUpMap'和'setUpMapIfNeeded'方法,但是保留'onCreate' /'onResume'方法? – erp
几乎 - 我说完全抛弃'MapsActivity',因为你不能在你的ViewPager中使用它。你基本上用一个扩展了'MapFragment'的新类来代替你的'MapsActivity', –
好吧,当我尝试这个时,我尝试添加'adapter.addFragment(new MapFrag(),“Map”)'我得到一个错误,它“找到了com.blah。MapFrag'但需要'android.support.v4.ap.Fragment'“ – erp