Buttons von zweitem Layout nutzen (crash)

  • Hallo zusammen,


    ich habe vor kurzem angefangen mich mit der Programmierung von Android zu beschäftigen.
    Da ich bereits mit C# gearbeitet habe, ist das objektorientierte Programmieren nicht völlig weltfremdes.
    Jedoch hakt es bei der ein oder anderen Kleinigkeit.


    Nun zu meinem Problem:
    Ich habe mit einer App begonnen, die dis dato nur eine Oberfläche (Layout (homescreen)) hatte. Soweit hat nach etwas Eingewöhnung das meiste funktioniert.


    Nun habe ich eine zweite Oberfläche (bluetooth_search_screen) erstellt, welche eine Liste von gefundenen Bluetoothgeräten anzeigen soll.


    Über einen Button auf dem homscreen layout wird zum bluetooth_search_screen layout gewechselt. Dies passiert mit folgenden Code:



    btnBT.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0)
    {
    setContentView(R.layout.bluetooth_search_screen);
    }
    });


    Das funktioniert auch soweit. Das zweite Layout wird dann angezeigt.


    Damit ich auf dem zweiten Layout arbeiten kann braucht es natürlich auch hier Bedienelemente. Zum Testen habe ich hierbei erstmal einfache Buttons verwendet.
    Wenn ich aber diese Buttons verwenden möchste stürzt die App ab. Der Debugger zeigt beim übersetzen jedoch keinen Fehler.
    Die Butons, wie auch bei den Bedienelementen auf dem homescreen, folgendermaßen definiert:



    ...
    btnBTsearch = (Button) findViewById(R.id.buttonBTsuchen);

    ...


    Sobald ich z.B. nur den Text ändern möchte mit


    btnBTsearch.setText("Guten Tag");stürzt die App ab.


    Bisher habe ich jeglichen Code in die MainActivity.java geschrieben.Ich verstehe aktuell nicht, warum das Programm abstürzt, wenn auf die Buttons vom zweiten Layout im Code zugegriffen wird. ;(
    Muss dabei irgendwas besonderes beachtet werden?


    Ich bin für jegliche Hilfe dankbar. :)


    Gruß Patrick

  • Hey angry.muffin,
    Ich bin mir nicht ganz sicher aber erstellst du für jede neue Scene einen neuen Screen?


    Dein Beitrag bringt mich irgendwie durcheinander.....

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Hi Fischkralle,


    entschuldige bitte meine Unwissenheit, aber mit dem Begriff Scene habe ich mich bisher noch nicht beschäftigt.
    Habe eben mal schnell die Definition durchgelesen, bin jetzt aber nicht ganz sicher wofür man das genau verwendet bzw. verwenden muss.


    https://developer.android.com/…oid/transition/Scene.html


    Ich habe einfach das Layout bluetooth_search_screen erstellt und gehofft ich könnte das einfach nutzen:




    Dort habe ich wie bereits geschrieben 2 buttons eingefügt und dachte auf diese könnte ich einfach aus dem aktuellen Code zugreifen.



    PS: Ich habe den ersten Post und die Überschrift angepasst, da das Problem anscheinend generell beim Zugriff auf Buttons von "bluetooth_search_screen" auftritt.
    Ansonsten habe ich noch nichts weiter gemacht.

  • PS.: Du musst dich hier für nix entschuldigen. Wenn du alles wissen würdest, müsstest du hier ja nicht nachfragen.


    Alles gut!!!

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Dein Link beschreibt das Problem einen Button zwischen 2 Layout anzuordnen. Das ist ja etwas völlig anderes.
    Wahrscheinlich habe ich mich nicht präzise genug ausgedrückt. Ich versuche es nochmal verständlicher zu erklären.


    Ich habe 2 Layouts erstellt: "homescreen" & "bluetooth_search_screen"
    Beide nehmen jeweils eine komplette Seite ein.
    - "homescreen" enthät Button1
    - "bluetooth_search_screen" enthält Button2


    Jetzt möchte ich zwischen den beiden Layouts hin und her wechseln. Dafür befindet sich in jedem Layout jeweils ein Button.


    Sprich der Ablauf sollte wie folgt aussehen:
    - App startet: Die Seite "homescreen" ist sichtbar.
    - Button1 wird betätigt -> Ansicht wechselt zu Seite "bluetooth_search_screen"
    - Button2 wird betätigt -> Ansicht wechselt zurück zu Seite "homescreen"



    Sobald ich jedoch versuche Button 2 im Code einzubinden stürzt das Programm ab.






    Ich habe eben beim debuggen festgestellt, dass es anscheinend Probleme bei der Zuweisung der Buttons von Seite 2 ("bluetooth_search_screen") gibt (Im Bild die letzten 2 unteren).


    buttonHome enstpricht Button2 in der obigen Beschreibung.
    buttonBT enstpricht Button1 in der obigen Beschreibung.




    Ich schätze, dass das Problem ist, dass btnHome und btnBTsearch null sind.



    Die Frage ist nur woher das kommt, also warum die Zuordnung nicht funktioniert.

  • Es stürzt erst bei der Ausführung ab. Beim kompilieren gibt er keinen fehler aus.


    Ich habe jetzt etwas gefunden, was zu helfen scheint.
    Wenn ich die buttons erst zuweise, nachdem das Layout gewechselt wurde funktioniert es.



    btnBT.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { setContentView(R.layout.bluetooth_search_screen); btnHome = (Button) findViewById(R.id.buttonHome); btnBTsearch = (Button) findViewById(R.id.buttonBTsuchen); btnHome.setOnClickListener(new OnClickListener() { @Over public void onClick(View arg0) { setContentView(R.layout.homescreen); } }) } });


    Jedoch verlieren beim Zurückwechseln die Buttons auf dem "homescreen" ihre Funktion.


    Ich muss hier doch grundlegend etwas falsch machen? Wie ist denn das übliche Vorgehen beim nutzen mehrerer Ansichten?




    EDIT: Muss für jede neue Ansicht eine neue Activity angelegt werden? Aktuell versuche ich beide Seiten in nur einer Activity zu verwalten.

  • Schon alleine damit es strukturierter und sauberer ist, würde ich hier mit mehreren Activities arbeiten.
    Fehler können einfacher lokalisiert werden und Du weißt damit wo Du Dich in Deinem Programm / Deiner App befindest...

  • Ich werde mich jetzt nochmal an ein, zwei tutorials entlanghangeln. Dauert zwar seine Zeit, aber ich denke dadurch wird der Aufbau einfach sauberer.
    Hoffentlich löst sich mein Problem dadurch von selbst :D


    Falls nicht melde ich mich nochmal hier.


    Soweit erstmal Danke für eure Hilfe bisher :)

  • Jetzt hat es auch der Fischkralle gerafft.


    Melde dich bitte auch (oder gerade dann) wenn du es hin bekommen hast.

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Habs jetzt mit 2 getrennten Activities gemacht. Das funktioniert einwandfrei.


    Und übersichtlicher ist das ganze auch noch.


    Mit Fragments hab ich mich bisher nur beiläufig beschäftigt. Das werde ich mir in Zukunft aber bestimmt auch noch näher ansehen.


    Danke für eure Hilfe :)

  • Habe ich es richtig verstannden, dass du zwischen zwei Layouts mit einem Button wechseln wolltest?


    wenn ja...


    ich habe bei mir das so gemacht, dass ich in der actifity_main.xml (bei dir homsrceen.xml) bei dem Button die android:OnClick="(hier kommt so etwas rein wie beispielsweise: bluetooth_search_screenClick oä.)" funktion hingeschrieben habe und in der MainActivity.java:


    public class MainActivity extends AppCompatActivity {


    public void bluetooth_search_screenClick (View view) {
    setContentView(R.layout.bluetooth_search_screen);
    }so kommst du von deinem homesrceen.xml in die bluetooth_search_screen.xml.

Jetzt mitmachen!

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