Как включить фрагмент Googlemap в класс Fragment?
Я хочу добавить маркеры и нарисовать ломаную линию между двумя точками на карте. Исключение возникает, когда я пытаюсь сослаться на Googlemap из класса Fragment.
Это похоже на то, что у меня есть класс, который расширяет класс Fragment, а представление класса фрагмента задается с помощью обычного XML-макета. Кроме того, этот макет содержит фрагмент, и именно здесь находится карта Google.
Вот код компоновки фрагмента, который содержит фрагмент карты;
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="#ffffff"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="20dp"
>
<EditText
android:id="@+id/from"
android:layout_width="300dp"
android:layout_gravity="center"
android:hint="Enter the starting location"
android:layout_height="wrap_content"></EditText>
<Button
android:id="@+id/btn_showDirections"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:text="Show Directions"
android:layout_height="wrap_content" />
<fragment
android:layout_width="match_parent"
android:tag="HelloMap"
android:layout_height="300dp"
android:layout_margin="10dp"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
/>
</LinearLayout>
Это класс, который связан с данным файлом макета
public class frg_planVisit_directionsToZoo extends Fragment {
GoogleMap mMap;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
try{
mMap = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
}
catch (Exception exp)
{
Log.i("Chin",exp.toString());
}
return inflater.inflate(R.layout.frg_planvisit_directions_to_zoo,container,false);
}
}
Фрагмент, который содержит фрагмент карты, связан с действием и работает нормально. Исключением является код, в котором я получаю ссылку на карту Google.
mMap = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
Если это не так, может кто-нибудь помочь мне получить ссылку на карту? Я новичок в Android.
Я опубликую некоторые важные вещи в трассировке стека для вашего удобства.
*12-17 04:00:24.533 19369-19369/com.android.ZooCeylon I/Chin﹕ java.lang.NullPointerException
12-17 04:00:25.423 19369-19374/com.android.ZooCeylon E/dalvikvm﹕ GC_CONCURRENT freed 359K, 8% free 13026K/14087K, paused 13ms+4ms, total 40ms
12-17 04:00:25.583 19369-19374/com.android.ZooCeylon E/dalvikvm﹕ GC_CONCURRENT freed 870K, 11% free 13647K/15239K, paused 7ms+15ms, total 64ms
12-17 04:00:26.013 19369-19369/com.android.ZooCeylon W/System.err﹕ Invalid int: ""
12-17 04:00:27.943 19369-19369/com.android.ZooCeylon I/Choreographer﹕ Skipped 207 frames! The application may be doing too much work on its main thread.
12-17 04:00:30.173 19369-19614/com.android.ZooCeylon W/System.err﹕ java.lang.NullPointerException*
2 ответа
Насколько я помню, карта инициализируется через некоторое время в обратном потоке. Для этого есть несколько обратных вызовов. Вы можете использовать примеры googles или создать картографическое действие из вашего ide, чтобы проверить, как это должно быть сделано.
Как сказал Евгений Печанец, в первую очередь необходимо переместить код в OnActivityCreate()
вместо OncreateView()
,
Кроме того, вы должны убедиться, что на вашем телефоне доступны службы Google Play, в противном случае вы получите GoogleMap NULL. Вы можете добавить код ниже, чтобы проверить, установлены ли сервисы воспроизведения или нет.
if(map == null){
int isEnabled = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
if (isEnabled != ConnectionResult.SUCCESS) {
GooglePlayServicesUtil.getErrorDialog(isEnabled, getActivity(), 0);
}
}
else{
//Continue what you were doing.
}