1

Après avoir essayé cela pendant environ 3 jours et avoir creusé quelques threads sans succès, je dois envoyer le fichier sos à quiconque peut regarder mon code avec bonté. L'application fonctionne parfaitement jusqu'à ce que je passe en mode paysage.Comment empêcher getChildFragmentManager de se transformer en SupportMapFragment en mode paysage

Je suis implémentant les solutions comme décrit dans les threads ci-dessous, donc je déplace le code de plusieurs façons, mais j'ai des erreurs comme: exception Nullpointer. Vue avec l'identifiant xxxx non trouvé. L'enfant a déjà un parent.

Peu importe ce que je fais, il continue à se bloquer. Voir les discussions que je vous plaît ai suivi, mais sans chance

thread 1, thread 2, thread 3, thread 4, thread 5

À ma grande déception que j'ai téléchargé cette belle application (Airbnb google map) pour voir comment ils ont résolu ce problème, mais après que je flippe le téléphone se bloque exactement comme le mien. Je vais probablement envoyer une note au développeur. Je lis dans les discussions les opinions sont différentes et les concepts donnés sont intéressants mais je ne peux pas résoudre ce problème. J'apprécierais de nouvelles lignes de code.

Le code

public class MapsActivity extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { 
    public static final String LOG_TAG = MapsActivity.class.getSimpleName(); 

    private static final int CURSOR_LOADER_ID = 0; 

    private Cursor initQueryCursor; 
    private GetSet coord; 
    private AppPreferences sPref; 
    private LatLng home; 
    private SupportMapFragment sMap; 
    private FragmentManager fm; 
    private GoogleMap mMap; 

    private static final String FRAGMENT_LISTS = 
       "net.simonvt.schematic.samples.ui.SampleActivity.LISTS"; 


    public MapsActivity() { 
    } 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     sPref = new AppPreferences(getActivity()); 

     SyncAdapter.syncImmediately(getActivity(), 
       sPref.getCoordBody("lat"), 
       sPref.getCoordBody("lon")); 
     getLoaderManager().initLoader(CURSOR_LOADER_ID, null, this); 
     // getLoaderManager().restartLoader(CURSOR_LOADER_ID, null, this); 

     // mMapCursor = new MapCursor(getActivity(), null, 0); 


//  ConnectivityManager cm = 
//    (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
//  NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 


//  getLoaderManager().restartLoader(CURSOR_LOADER_ID, null, this); 
    } 


    @Override 
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     if(savedInstanceState==null) { 

      View v = inflater.inflate(R.layout.yelp_google_map, container, false); 
      fm = getChildFragmentManager(); 

      sMap = (SupportMapFragment) fm.findFragmentById(R.id.map); 

      mMap = sMap.getMap(); 

      initQueryCursor = getActivity().getContentResolver().query(QuoteProvider.Quotes.CONTENT_URI, 
        new String[]{QuoteColumns.URL, QuoteColumns.DISPLAY_PHONE, QuoteColumns.RATING_IMG, 
          QuoteColumns.ID_BUSINESS_NAME, QuoteColumns.DISPLAY_ADDRESS, QuoteColumns.POSTAL_CODE, 
          QuoteColumns.LATITUDE, QuoteColumns.LOGITUDE}, null, 
        null, null); 

      LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
      if (initQueryCursor != null) { 

       DatabaseUtils.dumpCursor(initQueryCursor); 
       initQueryCursor.moveToFirst(); 


       for (int i = 0; i < initQueryCursor.getCount(); i++) { 


        home = new LatLng(Double.valueOf(initQueryCursor.getString(initQueryCursor.getColumnIndex("latitude"))), 
          Double.valueOf(initQueryCursor.getString(initQueryCursor.getColumnIndex("longitude")))); 
        Marker m = mMap.addMarker(new MarkerOptions().position(home). 
          title(initQueryCursor.getString(initQueryCursor.getColumnIndex("id_bussines_name")))); 

        initQueryCursor.moveToNext(); 
        builder.include(home); 
       } 
       if (home != null) { 
        mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 215, 210, 0)); 
       } 
       initQueryCursor.close(); 

       mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 

        public void onInfoWindowClick(Marker marker) { 


         Intent intent = new Intent(getContext(), DetailActivity.class); 
         intent.putExtra("title", marker.getTitle()); 
         startActivity(intent); 
        } 

       }); 

      } 

      return v; 
     } 

     return null; 

    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     return new CursorLoader(getActivity(), QuoteProvider.Quotes.CONTENT_URI, 
       new String[]{ QuoteColumns._ID, QuoteColumns.DISPLAY_ADDRESS, QuoteColumns.DISPLAY_PHONE, 
         QuoteColumns.RATING, QuoteColumns.URL, QuoteColumns.POSTAL_CODE, QuoteColumns.ID_BUSINESS_NAME, 
         QuoteColumns.LATITUDE, 
         QuoteColumns.LOGITUDE}, 
       null, 
       null, 
       null); 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 

     if (loader != null) { 
      //  mMapCursor.swapCursor(data); 
      initQueryCursor = data; 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 

    } 
} 

la mise en page

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context="mem.edu.joshua.MapsActivity" 
       android:background="#009688"> 
    <fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.SupportMapFragment" /> 
</RelativeLayout> 

Ceci est seulement l'une des erreurs que je reçois. En fonction de ce que je change je reçois une autre erreur comme ce que je l'ai mentionné ci-dessus

FATAL EXCEPTION: main 
                   Process: mem.edu.joshua, PID: 21406 
                   java.lang.IllegalArgumentException: No view found for id 0x7f0c0081 (mem.edu.joshua:id/map) for fragment MapsActivity{425ff5b8 #2 id=0x7f0c0081 MapsActivity} 
                    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1098) 
                    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286) 
                    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) 
                    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) 
                    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:532) 
                    at android.os.Handler.handleCallback(Handler.java:733) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:146) 
                    at android.app.ActivityThread.main(ActivityThread.java:5692) 
                    at java.lang.reflect.Method.invokeNative(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:515) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
                    at dalvik.system.NativeStart.main(Native Method) 
+0

Probablement vous devriez jeter un oeil à ces liens. 1) http://wptrafficanalyzer.in/blog/retain-markers-on-screen-rotation-in-google-maps-android-api-v2-using-parcelable-latlng-points/ (2) http: // www .androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html (3) http://www.androidtrainee.com/retain-markers-on-screen-rotation-in-google-maps-android -api-v2-en utilisant-parcelable-latlng-points/ – Stallion

+0

@Stallion, merci pour l'aide. Je vois le lien (2) est intéressant. J'avais espoir dans celui-là mais je continue d'obtenir. ** IllegalArgumentException: Aucune vue trouvée pour l'ID 0x..81 pour le fragment. ** Link (1) est similaire au lien (3). Ils se concentrent sur la conservation des marqueurs, je n'ai pas de problème avec ça parce que j'utilise SQLite. Aussi link (1) utilise une FragmentActivity et je n'ai pas de Fragment. Mon Main est dans un fichier différent dans lequel j'ai ajouté ceci. 'if (mTaskFragment == null) {..}' après l'implémentation dans Main 'MapsActivity.TaskCallbacks' suggéré par le lien (3) – Erik

Répondre

0

Prenez android: configChanges

<activity android:name=".yourFragmentactivity" 
     android:label="@string/appname" 
     android:configChanges="orientation|keyboard|keyboardHidden|screenSize" 
     /> 

ou prendre la disposition du paysage dans l'aménagement-terre comme prendre la disposition

+0

Ajouté votre code au manifeste et n'a pas fonctionné. Créé un nouveau map_layout.xml (paysage) et n'a pas fonctionné non plus. Nettoyé le projet pour essayer à nouveau mais rien. J'ai eu ça. IllegalArgumentException: Aucune vue trouvée pour l'ID 0x7f0c0081 (mem.edu.joshua: id/map) pour le fragment MapsActivity. J'apprécie que vous avez répondu à mon problème. – Erik