Posts by nono124

    Na so schwer sollte der Rest doch nun auch nicht mehr sein.


    Ich hoffe du siehst es dir wenigstens an und versuchst es zu verstehen. Eigentlich hast du den gesamten Code nun schon von mir bekomme musst ihn halt nur noch zusammen bauen.



    Quote

    Meine Kenntnisse reichen für diese mächtige Programmiersprache einfach nicht aus und bin in einem Alter wo ich das vermutlich nicht mehr aus Zeitmangel und fehlendem Wissen erlernen kann / will.


    Java (1995) ist nicht mächtiger als C# (2000), Java ist sogar ca. 5 Jahre älter als „C#‘ und das kannst du ja sagst du im ersten Post.



    Ich persönlich habe auch erst ca. vor 5 Jahren mit Java angefangen wegen Android.

    Bin auch nicht mehr der Jüngste. Also gebe dich nicht auf.



    Dann noch gutes Gelingen mit deiner App.

    Zur Frage ob dein Viewmodel richti ist ?

    Kannst du dir selber beantworten wird es Kompiliert ja oder nein? Nein es wird einen Fehler geben.


    Ist die Methode findViewById in der Klasse verfügbar?

    Wo in Welcher Android Klasse ist die Methode laut Doku vorhanden?

    Wovon erbt dein Adapter erbt er von Activity so das du die Methode benutzen kannst?

    Das sind Fragen die du dir selber stellen solltest.




    Dein Adapter sollte passen.

    Quote

    Bisher hat kein Spieler von einem Problem berichtet. Neuinstallation des Spiels hat nichts gebracht.

    Dann haben halt die wenigen User noch ein altes Handy ohne Android13.

    Ab 13 wurde wieder einiges Geändert.

    Quote

    Wenn ich mein Samsung Handy neustarte, funktioniert das Spiel. Beende (oder verlasse) ich die App und rufe sie erneut auf, geht das Spiel nicht mehr (d.h. Drag-n-drop Fehler).

    Heine Ahnung warum das so ist.


    Quote

    as Spiel funktioniert auf dem Android Studio Emulator am PC, auch mit neuester Version (also Android 13).


    Das ist nicht unüblich das sich der Emulator anders verhält al ein echtes Gerät.

    Ist hat nur eine Emulation und auch ein anderes Images x68 nicht ARM. Deshalb sollte man immer auf mehreren unterschiedlichen Gräten testen.


    Code
    Das ist doch verrückt! Wie kann sowas sein? Hat jemand einen Tipp?

    Schaue doch mal welche Methoden ab API 33 Deprecaded sind.


    Ohne genauere Infos. Oder Error Meldungen kann man da wenig sagen.

    Quote

    Also gehört das findViewById und setzen des faragment in die JsonAdapter.java?


    Nein das findViewById ist und bleibt in der Mainactivity.



    Quote

    von dort gebe ich quasi die Anweisung an das ViewModel das er mir die page switchen soll? Mit


    Nicht ganz du speicherst den Zustand in dem ViewModel. LiveData ist sozusagen eine besondere Variable was den Wert aufnimmt und speichert.


    Beide Klassen (Activity und Adapter) können nachdem sie sich die Instanz von dem ViewModel geholt haben darauf zugreifen.

    Das Machst du mit dem ViewModelProvider, wie du den In der Activity einsetzt kannst du dir in den schon verlinkten Dokus ansehen.

    So und nun kommt der Besondere DatenTyp (Klasse) ins Spiel. Der der lässt sich auch mit einen Observier auf Veränderungen beobachten. Der Observier kann dann eine Action ( Methode )ausführen zb dein setCurrentItem().

    Das macht er unabhängig deinen zutuen wenn er eine Veränderung in der Variablen bemerkt.

    Ich hoffe der Sachverhalt ist jetzt klar geworden.



    Was du da als Action benutz ist dir überlassen MethodenRef Lambda oder Klassisch eine anonyme Klasse ist dir überlassen.

    Sogar eine eigne nicht anonyme Klasse ist möglich. Ich bevorzuge die MethodenRef seit Java8.



    Anonyme Klasse wäre das.

    Code
    final Observer<Integer> nameObserver = new Observer<>() {
                @Override
                public void onChanged(@Nullable final Integer newValue) {
                    viewPager2.setCurrentItem(newValue);
                }
            };
            mainModel.getPage().observe(this, nameObserver);


    Bei den EditTexten ist das Ja genau dasselbe.

    Ich glaube du solltest dir die Grundlagen von OOP und vor allen den LifeCycle einer Activity anschauen.

    Quote

    Was für eine Variante wäre den einfacher zu verstehen? Für mich klingt ViewModel und einen Observer in der MainActivity einfachen.. oder ist dem nicht so?

    LG

    Das sagte ich ja. Das es mit dem Viewmodel einfacher ist.

    Du erstellt in dem Viewmodel ein MutableLiveData Objekt vom Typ Integer. Natürlich auch die Getter und Setter.

    Listener und Activity klannst du so darauf zugreifen.

    Ist im grunde genau wie das mit den Strings.

    Hallo richtig du brauchst in dem Listener die Instanz vom ViewPager. Um darauf setCurrentItem( dein Tap zb 0) auszuführen.

    Nur wie du versuchst die Instaz zu holen ist falsch.


    Denke nach wo der den Pager erstellt wird. Welchen Context brauchst du da, und was hast du?

    Da würde der Fragmentmanager in Spiel kommen. Weil du im Fragment nicht so einfach an die Instanz des ViewPager ran kommst.



    Aber du kannst es genauso mit dem ViewModel und einen Observer in der MainActivity machen.

    Dort also ein MutableLiveData Objekt vom Typ Integer beobachten und den Viewpager mit setCurrentItem setzen.

    Ob du dazu eine Methodenreverenz oder ein Lmabda benutz ist dir überlassen.


    Methodenreverenz in C# -> Delegate

    Observer Pattern gibt es da auch.



    ViewModel overview  |  Android Developers
    ViewModel lets you manage your UI&#39;s data in a lifecycle-aware fashion.
    developer.android.com

    Quote

    Ich habe rausgefunden, warum (auch bei mir) in Fragment2 nichts angezeigt wird.

    Weil im Source Code bei Fragment2 noch http://karaoke.... statt https://karaoke.... steht. (Wurde leider in der Zwischenzeit umgestellt)

    Wenn dein erstes Problem ist das du nichts im Recyclerview angezeigt bekommst .

    Solltest du das auch sagen, das hast du zb nicht, woher sollen wir das wissen.

    Wo genau im Moment du ein Problem ist. Eine genauer ausführliche Fehlerbeschreibung solltest du schon liefen.




    Dann zeige doch mal deinen Listener.



    diene beiden Links gehen nicht

    Ja dann solltest du vielleicht nochmal genau Beschreiben wo genau du hängst.


    Denn in den Code den du mal gepostet hast waren einige Fehler oder er war unvollständig.

    Ich sehe da zb nichts in dem Fragment 2 wo du deinen Titel und Interpret in dem Recyclerview auswählst.


    Dafür erstellt man normalerweise einen ItemOnKlickListener.

    Schaue dir doch mal ein paar Tutoriell zum Thema RecyclerView mit Itemklicklistener an.


    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.


    Defining item click listener for RecyclerView in Android | Codexpedia


    Android RecyclerView OnItemClickListener Example



    Im Übrigen ist es auch schlecht bzw. nicht schön und sinnvoll wenn du zwischen jeden Post. Mal nach ca zwei Wochen vorbei schaust.

    Das sieht für mich immer so aus als ob kein Interesse an der Antwort ist.

    Wie so sollte ich zu helfen versuchen, wenn es einige Wochen dauert bis du Interesse zeigst du willst doch was. Nicht ich.

    Ich habe keine Lust dir alles aus der Nase zu ziehen. Dann lasse ich es besser sein. Denke mal darüber nach.

    Hallo

    Ein Primary Constructor wird ja bei Kotlin automatisch erstellt.

    Wenn du da etwas außer der Variablen Definition hinzufügen willst benutzt du den Initializer Block (init).


    Für weitere Secondary Constructor benutzt du das codeword „constructor“


    Du kannst also in Kotlin keine Methode (Funktion bei Kotlin) mit dem Bezeichner „init“ erstellen.

    Denn das ist der Initializer Block. Bei Java wird die Install Methode oft so genannt.


    Kotlin Constructors and Initializers (With Examples)


    In deiner MainActivity hast du ein Constrainlayout. Du bindest also dein CusttomView auch da ein, aber hast keine Ankerpunkte gesetzt.

    In einem ConstrainLayout müssen immer mindestens zwei gestelzt werden.

    Oder du benutzt auch hier ein Linearlayout.