Как включить фрагмент 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.
      }
Другие вопросы по тегам