Migration auf View Binding

  • Hallo Zusammen,

    Meine App hat bisher gut funktioniert.

    Ab dem letzten Update ist es nicht mehr möglich ohne View Binding zu arbeiten. Da ich auch mit einer Sqlite DB und mit einem RecyclerView arbeite, schaffe ich es nicht, auf einen geeigneten Adapter incl. Holder zu migrieren. BUILD bricht mit Fehler ab.

    Habe auch eine ältere Version von Android Studio installiert. Ohne Verbesserung.

    Kann mir jemand weiterhelfen?

  • Hallo Michael,


    endlich sagt jemand was ich schon immer sagen wollte aber mich nicht getraut habe: man muss nicht jeden Krampf mitmachen aus lauter Angst dass irgenwann Google nur noch diese "facility" zulässt..

    Werde mich nun un-binden.

  • Tja, schon das erste un-binding Problem.

    Das folgende map Beispiel enthält binding, aber gesucht wird nach der Id ".map".

    So liegt es nahe, den bindingcode auszuschalten. Dann ergibt sich einen crash.


    In diesem Fall kann ich mit binding leben, aber gerne wüsste ich warum es crasht. Weiss das jemand?



  • Wenn du ohne binding arbeiten willst. Dann schalte es im Gradle aus. Und binde das Layout so in onCreate und setcontentview genauso ein wie es ohne binding auch war.

    Natürlich musst jetzt wider mit findViewById atbeiten.


    Du bist ja auch in einem Fragment und nicht in einer Activity.

    Schaue dir an wie das binding in einen Fragment funktioniert.

    Setcontentview ist da unüblich. Auch ohne binding wird das da nicht benutzt.


  • und schon kommt die nächste Hürde.: der FragmentContainerView, der immer dringend empfohlen wird.


    Ich habe ein simples Beispiel gefunden mit dem man zwischen Fragment blau und Fragment orange springen kann.

    FragmentOrange habe ich zunächst in FragmentMap umbenannt.


    Nach der (naiven) Umstellung auf MapActivity meldet das System "MapFragment cannot be converted to fragment". Ich ahne dass


    Was wäre zu machen damit das möglich wird?

    (Bemerkung: brauche scheinbar professionelle Hilfe damit es schneller geht. Kennt ihr jemand?)




  • Wie hast du es den umbenannt?

    Wo und welche Fehlermeldung kommt denn?

    Ort und Fehlermeldung bitte immer mit angeben.


    Zum umbenennen dafür gibt es es den Refactor in der IDE.


    Ich hoffe du hast den Dateinamen auch geändert und nicht nur den Klassen Bezeichner.

  • Ich habe tatsächlich mit refactor umbenannt. Danach funktionierte die blau/orange Umschaltung wie vorher.


    Wegen der vorgenannten Fehlermeldung (fragment nicht als map akzeptiert) kehrte ich inzwischen zu diesem Stadium zurück: nur Umbenennen, keinerlei Veränderung der Activity .

    Dann habe ich NUR die fragment_map.xml mit folgendem code ergänzt:


    Code
       <fragment xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:map="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MapsActivity" />


    und siehe da, wenn man auf den map-Knopf drückt kommt am Handy kurz orange aber danach eine Weltkarte. Also die Fehlermeldung wird voraussichtlich nicht mehr kommen.


    Nun habe ich von

    Code
    public class MapsActivity extends AppCompatActivity{
    auf 
    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    wie vorher umgestellt (es wird nur ein extend akzeptiert).

    Es gab tatsächlich keine Fehlermeldung aber einen crash: "FragmentContainer angehalten"


    Kann es an der fehlenden AppCompatActivity liegen?

    Hätte ich den xml code woanders unterbringen müssen?

    Oder?

  • Inzwischen kann ich mit dem FragmentContainer-Prinzip einigermassen umgehen. Die Fragment-Umschaltung funktioniert, die map-Integration ist fast fertig. Somit verabschiede ich mich von diesem binding thread.

    Hat Klaus inzwischen sich wie ich von binding verabschieded?

Jetzt mitmachen!

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