2012-12-10 6 views
4

나는 지금 다음 코드는 작동, 사용자 정의 레이아웃 SupportMapFragment을 위해 노력하고 있어요 :맞춤 레이아웃이있는 SupportMapFragment?

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     View view = super.onCreateView(inflater, container, savedInstanceState); 
     // initMap(); 
     return view; 
    } 

하지만 대신 super.onCreateView() 메소드를 호출하는 다른 레이아웃을 팽창하는 onCreateView() 방법을 변경하고 싶습니다. 이런 식으로 뭔가 같이하려면

View view = inflater.inflate(R.layout.fragment, container,false); 
mMap = (GoogleMap)view.findViewById(R.id.mapview); 

그러나 GoogleMap으로가 아닌 view 그래서 나는 다음과 같은 방법처럼 XML에 추가하지 수 :

<com.google.android.gms.maps.GoogleMap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mapview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 

답변

6

맞춤 레이아웃이 포함 된 SupportMapFragment를 만들려면 지원 라이브러리에서 android.support.v4.app.Fragment을 확장하고 여기에 com.google.android.gms.maps.MapView 및 기타보기가있는 맞춤 XML을 부풀려야합니다.

그러나 MapViewhere과 같은 라이브 사이클 방법을 전달해야합니다.

+0

조각을 화면에 추가하려고 할 때 빈 화면이 나타납니다. – meh

+0

모든 라이브 사이클 메소드를 새로운'MapView'에 전달 했습니까? '((MapView) findViewById (R.id.mapView)). 조각의'onCreate()'에 을 작성 하시겠습니까? – Greeny

+0

오, 내가 명시 적으로 메서드를 호출해야합니다, 나는 그것을 시도합니다. 그래서 모든 라이프 사이클 방법을 오버라이드해야합니까? – meh

4

com.google.android.gms.maps.MapViewView입니다 당신 레이아웃에 포함시킬 수 있습니다.

+0

Google지도 v2 API를 사용하고 싶습니다. – meh

+2

@themilkman :'com.google.android.gms.maps.MapView'는 v2 API에서 가져온 것입니다. http://developer.android.com/reference/com/google/android/gms/maps/MapView.html https://developers.google.com/maps/documentation/android/map#mapview – CommonsWare

+0

감사합니다. 도움이 될거야. – meh

5

지도 위에 LinearLayout을 추가했습니다. 나는 버튼이 배치 사용 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/llPlaces" 
android:orientation="horizontal" 
android:background="@color/ACGris"> 
    <Button android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="BUTTON1"/> 
    <Button android:id="@+id/btn2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="BUTTON2"/> 
    <Button android:id="@+id/btn3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="BUTTON3"/> 

을 그리고 나는 이것이 당신이

+0

onCreateView()는 12 개의 null 자식이있는 framelayout을 반환하므로 Android 2.3에서는 실패합니다. 안드로이드 4.1.2에서는 나중 단계에서 또 다른 널 포인터 예외가 발생합니다. – elcuco

1

당신이 onCreateView 대체 할 수 있습니다 작동

public class FrgMapas extends SupportMapFragment{ 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View viewMain = super.onCreateView(inflater, container, savedInstanceState); 
    View viewButtons = inflater.inflate(R.layout.layout_buttons, null); 

    FrameLayout mainChild = (FrameLayout) ((ViewGroup)viewMain).getChildAt(0); 
    mainChild.addView(viewButtons); 

    Button btn1 = (Button) viewMain.findViewById(R.id.btn1); 
    btn1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(getActivity(), "TuTa :)", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    return viewMain; 
} 

희망 SupportMapFragment를 확장하는 클래스를 생성 SupportMapFragment에서 파생 된 클래스입니다. super.onCreateView를 호출하고 그 결과를 inflater 또는 인스턴스화하는 사용자 정의 ViewGroup에 삽입 할 수 있습니다. 다음은 몇 가지 샘플 코드입니다.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    FrameLayout layout = (FrameLayout) inflater.inflate(R.layout.my_layout, 
      container, false); 

    View v = super.onCreateView(inflater, container, savedInstanceState); 
    layout.addView(v, 0); 
    return layout; 
} 
관련 문제