지도를 표시하기 위해 프로그래밍 방식으로 2 개의 하위 단편이 추가되는 상위보기가 있습니다. 이것은 자식 조각을위한 레이아웃이고, Map은 FrameLayout에서 렌더링됩니다.Android 사용자 정의보기 및 중첩 된 단편
location_field_view.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/settings_action_item_row_style"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="256dp"
android:id="@+id/map_fragment_container"
android:layout_marginTop="2dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is where map loads."/>
</FrameLayout>
</LinearLayout>
지도 FrameLayouts 대응에로드 할 수 할 수있는 클릭 이벤트가있다. 내 문제는 비록 FrameLayout 뷰가 성공적으로 부풀려지고 있지만 (두 자식 조각 모두에 대해 "지도가 여기로드됩니다") 디버그 텍스트를 볼 수 있지만 두 번째 자식 조각의지도는 첫 번째 자식 조각 자체에서 렌더링됩니다. 두 번째지도 클릭 리스너가 트리거 될 때). 여기서 무엇이 잘못 될 수 있습니까? 다음 부모 단편에 첨가 레이아웃 상기 풀리는
분류 :
LocationField.java
public class LocationField extends LinearLayout
{
private MyMapFragment mMapFragment;
public LocationField()
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.location_field_view, this, true);
addMapFragment();
//mMapFragment.loadMap() method gets triggered based on a click event.
}
private void addMapFragment()
{
mMapFragment = MyMapFragment.newInstance(lat, long, marker);
FragmentTransaction transaction = mParentFragment.getChildFragmentManager().beginTransaction();
transaction.add(R.id.map_fragment_container, mMapFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
MyMapFragment.java
public class MyMapFragment extends MapFragment implements OnMapReadyCallback
{
private static final String KEY_MARKER = "marker";
private static final String KEY_LATITUDE = "latitude";
private static final String KEY_LONGITUDE = "longitude";
private LatLng mLatLng;
private String mMarker;
public static MyMapFragment newInstance(Double latitude, Double longitude, String marker){
MyMapFragment myMapFragment = new MyMapFragment();
Bundle arguments = new Bundle();
arguments.putDouble(KEY_LATITUDE, latitude);
arguments.putDouble(KEY_LONGITUDE, longitude);
arguments.putString(KEY_MARKER, marker);
myMapFragment.setArguments(arguments);
return myMapFragment;
}
public void onCreate(Bundle savedInstance)
{
super.onCreate(savedInstance);
Bundle arguments = getArguments();
mLatLng = new LatLng(arguments.getDouble(KEY_LATITUDE), arguments.getDouble(KEY_LONGITUDE));
mMarker = arguments.getString(KEY_MARKER);
}
public void loadMap()
{
getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
if (googleMap == null) {
return;
}
googleMap.addMarker(new MarkerOptions().position(mLatLng).title(mMarker));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLatLng, 10f));
}
}