Probleme mit der Umstellung auf Fragment View in einer App mit OSMdroid

  • Hallo Zusammen,


    ich versuche gerade meine kleine App auf Fragmente umzustellen, damit ich "Settings" entsprechend einbauen kann.
    Jetzt stürzt meine App leider immer beim starten ab und ich vermute einen Fehler in den Layout-Definitionen.


    hier die Dateien
    activity_main.xml





    Content_main.xml



    fragment_main.xml


    MainActivity

    Vielleicht sieht ja jemand von Euch mein Problem oder gibt es eine gute Webseite, wo man das ganze vernünftig nachvollziehen
    kann. Ich habe mir letztendlich am Ende eine Beispiel-App mit dem Android Studio angelegt und danach meine Applikation
    versucht umzubauen.


    Ich vermute den Layoutfehler, weil ich im Editor die Warnmeldung bekomme:

    Code
    This view is not contained vertical: at runtime it will jump to the top unless you add a vertical constraint



    Viele Grüße
    R.

  • Hallo Jogimuc,


    stimmt. Habe ich abgeändert. Leider ohne erfolgt.
    Im Prinzip habe ich die Dateien aus dem Beispielprogramm übernommen.


    Ich habe jetzt auch mal einfach das komplette fragment_main und die java class durch das Beispiel aus der laufenden Beispielanwendung übernommen.
    Es stürzt immer noch ab. :(



    Code
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
    
            setContentView(R.layout.activity_main);
            Toolbar toolbar = findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
        }


    Diese Routine wird noch fehlerfrei durchlaufen.


    Code
    Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.

    Daher habe ich diese beiden Zeilen entfernt:

    Code
    //        Toolbar toolbar = findViewById(R.id.toolbar);
    //        setSupportActionBar(toolbar);

    in der Main Activity. Das kleine Beispielprogramm lief dann.


    Ich scheine aber ein Problem mit der Permission Request zu haben, da das Programm jetzt an dieser Stelle sich beendet.


    So sieht die Routine jetzt innerhalb eines Fragments aus:



    Viele Grüße
    R.

  • Scheinen doch noch andere Probleme im Zusammenhang mit dem Layout zu sein.


    Code
    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener"
    Code
    mapView = getView().findViewById(R.id.mapView);                    // Find the Map view in the resource file
        mapView.setTileSource(TileSourceFactory.MAPNIK);
        mapView.setMultiTouchControls(true);


    Ich bekomme für "mapView" einen Null-Pointer zurück. Daher "knallt" es.


    Vielen Dank für den Tip mit dem Layout. Das hat mich wieder in die Situation gebracht, den Debugger zu verwenden.
    Viele Grüße
    R.

  • ActivityCompat.checkSelfPermission


    Ist auch falsch im Fragment du brauchst den Context der Activity und nicht die Klasse ActivityCompat. Ich meine die Instanz der activity. Das was dir due IDE vorschlägt und berichtigt ist falsch in diesem Fall.


    getActivity().checkSelfPermission


    Sollte gehen, beim Suchen mit findviewbyId ist es übrigens das selbe.


    Ein Methoden Aufruf ohne die Instanz geht nicht.


    Dein Fragment erbt nicht von Activity also ist die Methode nicht vorhanden und du brauchst den Context. Eine Variante den zubekommen weist du jetzt.

  • getView() ist auch falsch.
    Sagte ich bereits.
    Dafür kannst du dir die view in der onCreateView sichen die du dort inflates.


    Auch eine möglich an den Context zukommen ist die onAttach Methode dort wird der dir als Parameter übergeben. Kannst ihn in einer Klassen Variablen speichern.

  • Hallo Jogimuc,


    danke für die Tipps. Die Anwendung startet jetzt wieder. Ich habe die Permission auch in die MainActivity gesetzt.
    Musste aber jetzt "@SuppressLint("MissingPermission")" in das Fragment einfügen. Ist das normal ?


    Ansonsten startet die App wieder und zeigt auch wieder Daten auf dem Bildschirm an.


    Derzeit stört mich nur noch, das ich plötzlich eine zweiten Bereich der Actionbar habe, den ich nicht verwende.
    Hier wird derzeit ein "grauer" Balken angezeigt. Mal sehen ob ich das auch noch finde.



    Gefunden, das hier war wohl durch das ganze Probieren zu viel in der Datei "activity_main.xml"





    Viele Grüße
    R.

  • diese Zeilen waren/sind in der Layout Datei der "activity_main.xml"


  • Hallo,


    hier die Zeilen in der MainActivity, welche ich remarkt habe


  • Ich bin im Moment nicht am Rechner kann es nicht testen.
    Wie war es ohne Fragmente.
    Da hattest du bestimmt nur ein linearlyayout. Und kein umgehbenese constrain oder?


    Füge doch genau das als include in dem mainlayout ein. Wozu überhaupt das constrain als Umbau?

  • Hallo also ich glaube nicht dass es an dem Layout liegt. Ich habe mal deines benutzt aber nur ein Bild anstatt der osmdroid.views.MapView eingefügt. Kein Streifen.


    Den Fehler würde ich bei deiner osmdroid view suchen. Kenne mich da leider wenig aus.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!