2013-10-14 3 views
0

두 개의 탭이있는 ActionBar가있는 MainActivity가 있습니다. 첫 번째 탭은 센서 데이터 값을 표시하고 두 번째 탭은지도를 표시하려고합니다. 는하지만 다음과 같이 MainActivity가 표시됩니다조각에 Google지도 구현하는 방법

두 번째 탭의 조각에지도를 구현하는 문제가있다 :

public class MainActivity extends Activity 
{ 
private static final String DATA_FRAGMENT_BAR = "Data"; 
private static final String MAP_FRAGMENT_BAR = "Map"; 

private DataCollection mDataCollection; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Config.mContext = this; 
    ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME| ActionBar.DISPLAY_SHOW_CUSTOM); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab dataTab = actionBar.newTab().setText(DATA_FRAGMENT_BAR); 
    ActionBar.Tab mapTab = actionBar.newTab().setText(MAP_FRAGMENT_BAR); 
    Fragment dataFragment = new FragmentData(); 
    Fragment mapFragment = new FragmentMap(); 

    dataTab.setTabListener(new MyTabsListener(dataFragment)); 
    mapTab.setTabListener(new MyTabsListener(mapFragment)); 

    actionBar.addTab(dataTab); 
    actionBar.addTab(mapTab); 
    mDataCollection = DataCollection.getInstance(); 
} 
.... 
} 

TabsListener이 공용 클래스 MyTabsListener 다음과 같이 표시됩니다 ActionBar.TabListener 구현 { 개인 조각 단편;

public MyTabsListener(Fragment fragment) 
{ 
    this.fragment = fragment; 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
    ft.replace(R.id.fragment_container, fragment); 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
    ft.remove(fragment); 
} 
} 

다음은지도 단편 클래스는 아래와 같이된다 : I은 라인에서 FragmentMap 클래스 브레이크 포인트 설정

public class FragmentMap extends Fragment 
{ 

MapView mapView; 
GoogleMap map; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View v = inflater.inflate(R.layout.fragment_map, container, false); 
    // Gets the MapView from the XML layout and creates it 
    mapView = (MapView) v.findViewById(R.id.mapView); 
    mapView.onCreate(savedInstanceState); 

    // Gets to GoogleMap from the MapView and does initialization stuff 
    map = mapView.getMap(); 
    //map.getUiSettings().setMyLocationButtonEnabled(false); 
    //map.setMyLocationEnabled(true); 
    map.addMarker(new MarkerOptions().position(new LatLng(50.167003,19.383262))); 


    // Needs to call MapsInitializer before doing any CameraUpdateFactory calls 
    try 
    { 
     MapsInitializer.initialize(this.getActivity()); 
    } 
    catch (GooglePlayServicesNotAvailableException e) 
    { 
     e.printStackTrace(); 
    } 

    // Updates the location and zoom of the MapView 
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(43.1, -87.9), 10); 
    map.animateCamera(cameraUpdate); 

    return v; 
} 

@Override 
public void onResume() 
{ 
    mapView.onResume(); 
    super.onResume(); 
} 

@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
    mapView.onDestroy(); 
} 

@Override 
public void onLowMemory() 
{ 
    super.onLowMemory(); 
    mapView.onLowMemory(); 
} 
} 

"mapView.onCreate (savedInstanceState)을;" savedInstanceState가 null이며 프로그램이 줄 이후에 중단됩니다.

누군가 도움이 될 수 있습니다. 미리 감사드립니다.

답변

0

Google은 Map API 버전 2를 출시했습니다. MapFragment 및 SupportMapFragment가 제공됩니다. 이렇게하면 MapActivity를 확장하지 않고 Map을 추가 할 수 있습니다.

Google Maps v2 In fragment cashes when clicked twice

+1

mapView.onResume() 전에 호출해야합니다. 내 문제는 MapFragment를 사용하면 TabsListener가 작동하지 않는다는 것입니다. 두 개의 탭이 있습니다. 탭 중 하나는 센서 값을 표시하는 것이므로 조각을 사용했습니다. – user2753594

0

정말 설명서에서 명확하지만, MapView.onCreate() 방법은 없습니다 또한 Fragment.onCreate()

, MapView.getMap()가 null 반환 할 수에서 Fragment.onActivityCreated()에서 호출해야하지,하는 것을 잊지 마세요됩니다 그것으로 확인하십시오.

내가 질문에 TabsListener 클래스를 추가해야 super.onResume()

관련 문제