Я пытаюсь создать приложение для Android, которое имеет одну активность и несколько фрагментов. Каждый фрагмент будет занимать весь экран, когда он находится в поле зрения, и при замене транзакции он должен быть переключен на другой фрагмент.android map in fragment
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Это контейнер для фрагментов. Проблема в том, что фрагмент, который я хочу использовать, - это GoogleMap. Это мой код для фрагмента карты:
public class Map extends Fragment{
private final static String TAG = "MAP Fragment";
public GoogleMap googleMap = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setUpMapIfNeeded();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.map_fragment, null);
return view;
}
private void setUpMapIfNeeded()
{
if(googleMap == null)
{
googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap();
if(googleMap != null)
{
GoogleMapOptions options = new GoogleMapOptions();
options.mapType(GoogleMap.MAP_TYPE_NORMAL)
.camera(new CameraPosition(new LatLng(25f, 47f), 13f, 0f, 0f));
}
else
{
Log.d(TAG, "googleMap is null !!!!!!!!!!!!!!!");
}
}
}
}
и это расположение:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
И в Основной вид деятельности:
@Override
protected void onCreate(Bundle savedInstanceState)
{
Map test = new Map();
getSupportFragmentManager().beginTransaction()
.add(R.id.content_frame, test)
.commit();
}
Я получаю нулевой указатель исключение: (я считаю, что он не может найти R.id.map)
googleMap = ((MapFragment) getActivity().getFragmentManager()
.findFragmentById(R.id.map)).getMap();
Если я не использую «getActivity()». он говорит, что он не может отбрасывать из фрагмента в MapFragment.
Мне нужна "googleMap" для создания маркеров на карте.
Когда я делаю то же приложение, но без фрагментов (моя основная деятельность дублирует карту, а у меня нет других фрагментов), когда-то работает отлично.
Я нашел похожие темы: Google Maps API v2 Custom MapFragment + SimpleFragment и error using maps in fragment. Но если я расширяю FragmentActivity или SupportMapFragment, я не могу заменить фрагмент другим, используя транзакции.
Заключение: Я хотел бы, что, когда происходит действие (щелчок или что-то), я только заменить fragmens, как это:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
Что я делаю неправильно? Или я должен использовать другой подход к проблеме?
(P.S. Я realtively новый для андроида)