2014-10-24 1 views
0

Android 애플리케이션에서 Google 맵의 유형을 변경하는 데 문제가 있습니다. 기본적인 작업 표시 줄 메뉴가 있고 작업 표시 줄에서 올바른 옵션을 선택하면지도가 내 활동의 단편으로 배치됩니다. 여기 내 코드입니다 :MapFragment 런타임에 setMapType을 시도 할 때 런타임에 앱이 다운 됨

package com.example.where2go; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 

public class MainActivity extends FragmentActivity { 

    private MahMapFrag mapFragment; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try { 

      initializeMap(); 

     } catch (Exception e) {e.printStackTrace();} 

    } 

    private boolean initializeMap() { 
     if (mapFragment == null) { 

      mapFragment = new MahMapFrag(); 
      // check if map is created successfully or not 
      try{ 
       if (mapFragment == null) { 
        Toast.makeText(getApplicationContext(), 
          "Sorry! unable to create maps", Toast.LENGTH_SHORT) 
          .show(); 
        return false; 
       } 
       else { 
        Log.d("MLOGS", "Map Intitialized"); 
        return true; 
       } 
      } catch(Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return false; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
      case R.id.action_map: 
       getFragmentManager().beginTransaction().replace(android.R.id.content,mapFragment).commit(); 
       break; 
      default: 
       return false; 
     } 
     return true; 
    } 

} 

그리고이 MapFragment가 확장 내 클래스 : 라인

this.getMap().setMapType(GoogleMap.MAP_TYPE_SATELLITE);

이 주석

package com.example.where2go; 

import android.util.Log; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 

public class MahMapFrag extends MapFragment { 

    public MahMapFrag() { 
     Log.d("MLOGS", "CONSTRUCT"); 
     //this.getMap().setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
    } 

} 

를 앱이 (보인다) 실행 부드럽게. 하지만 라인이 주석 처리되지 않은 경우 생성자에서지도의 유형을 변경하려고하면 액션 바를 클릭 할 때 앱이 다운됩니다.이 호출은 내비게이션 바를 클릭하면 호출됩니다.이 호출은

getFragmentManager().beginTransaction().replace(android.R.id.content,mapFragment).commit();입니다.

com.where2go.MainActivity.onOptionItemSelected에 널 포인터 예외가 있습니다. 지도 유형을 설정할 때 mapFragment가 null 인 이유를 알아 내는데 몇 시간을 시도했습니다.

누군가이 문제에 대한 단서 및/또는 설명을 줄 수 있습니까? 정말 이해하고 싶습니다, 나는 더 많은 안드로이드 개발에 중요한 무엇인가를 놓치고 있다는 느낌이 들기 때문에 ...

나는 Google Play 서비스가 설치된 eclipse Juno와 Genymotion을 사용하고 API 19로 컴파일합니다.

Qoya

+0

맵보기 (Map View)가로드 될 때까지 기다려야 할 수도 있습니다이를 추가 할 수 있습니다. Fragment의 onActivityCreated 메소드에서 MapType을 호출하여 작동하는지 확인하십시오. – StuStirling

답변

0

당신은 내가 MAH 케이스에 도움이 발견 사용하고 있는지 확인 감사드립니다. (귀하의 MahMapFrag 롤 참조)

fragmentManager = getSupportFragmentManager();

은 XML

<fragment 
    android:id="@+id/location_map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment" /> 
+0

답장을 보내 주셔서 감사합니다. 당신 덕분에 SupportMapFragment를 사용할 수있었습니다. 이제 PreferenceFragment 클래스를 사용하여 지원 패키지에서 사용할 수 없습니다 .--) 나는이 모든 패키지와 VS를 사용하기로되어있는 패키지로 인해 약간의 손실이 있음을 인정해야합니다. VS를 사용해야합니다. 많은 지원 v.XX 패키지 ... 그리고 fragmentManagers는 매번 연결됩니다. 내 대답이 도움이된다면 T_T – jlncrnt

+0

. 답변으로 수락하고 새로운 문제에 대해 다른 질문을하십시오. –

관련 문제