gpt4 book ai didi

java - FragmentMap + ActionBar 选项卡

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:57 26 4
gpt4 key购买 nike

我一直在尝试将 MapView 插入到 ActionBar Tab 中,但即使使用谷歌搜索也无法解决问题。

这是主要 Activity :

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.action_bar_tabs);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().add(android.R.id.content, GigLoader.GigLoaderListFragment.newInstance()).commit();

getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

ActionBar.Tab tab1 = getSupportActionBar().newTab().setText("Geo").setTabListener(this);
ActionBar.Tab tab2 = getSupportActionBar().newTab().setText("Lista").setTabListener(this);
getSupportActionBar().addTab(tab1);
getSupportActionBar().addTab(tab2);
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (tab.getPosition() == 0) {
fm.beginTransaction().add(android.R.id.content, GigLoader.GigLoaderListFragment.newInstance()).commit();
}
else {
fm.beginTransaction().add(android.R.id.content, GeoGigLoader.GeoGigMapFragment.newInstance()).commit();
}

}

这里是 GeoGigLoader 的代码:

public class GeoGigLoader extends FragmentMapActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

public static final class GeoGigMapFragment extends Fragment {

static GeoGigMapFragment newInstance() {
GeoGigMapFragment map = new GeoGigMapFragment();
return map;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.map_gigs, container, false);
MapView mapView = (MapView)view.findViewById(R.id.map_view);
mapView.setBuiltInZoomControls(true);
return view;
}

}

@Override
protected boolean isRouteDisplayed() {
return false;
}
}

FragmentMapActivity 是一个来自 actionbarsherlock.com 的库,这个库是从 MapActivity 扩展而来的,所以它应该可以工作。

我得到的错误是下一个:

FATAL EXCEPTION: main
E/AndroidRuntime(954): android.view.InflateException: Binary XML file line #2: Error inflating class com.google.android.maps.MapView
E/AndroidRuntime(954): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
E/AndroidRuntime(954): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)

有人知道发生了什么吗?

最佳答案

解决方案是在应该扩展 FragmentMapActivity 的主 Activity 中启动 mapview。然后你的 fragment 可以通过从主要 Activity 中获取它来实现 map View 。

主要 Activity :

    mMapView = new MapView(YourActivity.this, MAPS_KEY);
mMapView.setClickable(true);
Exchanger.mMapView = mMapView;

fragment :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mMapView = Exchanger.mMapView;
return mMapView;
}

@Override
public void onDestroy() {
if(mMapView != null) {
NoSaveStateFrameLayout parentView = (NoSaveStateFrameLayout) mMapView.getParent();
parentView.removeView(mMapView);
}
super.onDestroy();
}

Exchanger 是一个带有静态字段的类,里面有 mapview。

关于java - FragmentMap + ActionBar 选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com