1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Prob mit finish() aus eigenem Baseadapter

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Schwede, 26.04.2011.

  1. Schwede, 26.04.2011 #1
    Schwede

    Schwede Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2011
    Hej!
    Seit Tagen versuche ich, eine Activity aus meinem eigenen Listadapter (extends Baseadapter) zu schließen. Ich habe gegooglet und in diversen Foren gelesen. Alles, was ich erfahren habe war, dass der Context von der Activity an den Listadapter "gepassed" wird und man dann im Listadapter damit alles anstellen kann - einschließlich finish().
    Also rufe ich meinen Listadapter mit:
    Code:
    rl = new RechnungListAdapter(this, rechnung);
    wobei "this" die Activity ist. Ich kann also this.finish(); in der aufrufenden class ausführen.
    Auf der Listadapterseite sieht der Generator dann so aus:
    Code:
    public  RechnungListAdapter(Context pContext, ArrayList<KGButton> rechnung){...
    Und jetzt kommt mein Problem: ich kann nun nicht mehr, wie erwartet, pContext.finish() aufrufen.
    Warum ist das Objekt am anderen Ende ein scheinbar anderes? Oder wo ist mein Denkfehler?
    Viele Grüße
    Der Schwede
     
  2. swordi, 26.04.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    warum soll dein listadapter die activity schließen???

    da ist schonmal ein grundlegender fehler
     
  3. Schwede, 26.04.2011 #3
    Schwede

    Schwede Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2011
    Ich generiere einen Button an das Ende meiner Liste. Deshalb habe ich auch dort den OnClickListener. Und mit dem Button will ich die Liste schließen.
    Den Gedanken, den OnClickListener in der Activity zu programmieren hatte ich auch schon, aber we übergebe ich den Namen des Clicklisteners an den Button. Das passiert bei mir im Baseadapter.
    Code:
    Button button = (Button) convertView.findViewById(R.id.button1);
                button.setOnClickListener(listen);
     
  4. swordi, 26.04.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    der button hat nichts in der liste verloren.

    wenn du ein listenelement auswählst, überschreibe die onListItemClick Methode und speichere dir die auswahl

    der button hat einen onclicklistener in der activity. dort kannst du dann mit deiner auswahl machen was du willst
     
    Schwede bedankt sich.
  5. Schwede, 26.04.2011 #5
    Schwede

    Schwede Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2011
    Das ist sauber! So mache ich das! Vielen Dank swordi!
     
  6. Schwede, 29.04.2011 #6
    Schwede

    Schwede Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2011
    Nach 2 langen Abenden bin ich noch immer recht erfolglos.
    Ich habe die onListItemClick-Methode überschrieben und den Button per
    Code:
    this.button = (Button)this.findViewById(R.id.rbutton);
    an die Activity angehangen.
    Mein Problem besteht jetzt darin, dass ich keine geeignete Stelle finde, an der ich den onClickListener an den Button anhängen kann. Im onCreate() ist der Button noch null. (Ich hab's auch schon in onStart() versucht - auch null).
    In der onListItemClick-Methode ist der Button da, aber wenn ich dort erst den onClickListener anhänge, dann habe ich den Effekt, dass ich immer erst einmal irgendwo in die Liste klicken muss, damit danach, beim Klick auf den Button, der onClickListener feuert.
    swordi schrieb:
    aber den finde ich nicht. Hab schon versucht onClick(View v) zu überschreiben. Ist nicht geglückt.
    Viele Grüße
     
  7. Mort, 30.04.2011 #7
    Mort

    Mort Android-Lexikon

    Beiträge:
    960
    Erhaltene Danke:
    262
    Registriert seit:
    16.11.2009
    Android bietet da viele Möglichkeiten... Am besten machst du das setOnClickListener-Zeugs gleich nach dem findViewById, dann ist das Feld auch nicht mehr null. ;)
    Üblich ist onCreate (nach super.onCreate()), theoretisch gingen aber auch z.B. onStart oder onResume. Sofern das Layout nicht geändert wird, ist alles außer onCreate aber CPU-Verschwendung, da es dort mehrfach aufgerufen wird.
     
    Schwede bedankt sich.
  8. Schwede, 30.04.2011 #8
    Schwede

    Schwede Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2011
    Hallo Mort,
    ich hatte bei onCreate() und auch bei onStart() natürlich zuerst das findViewById-"Gedöns" gemacht. Der Button blieb trotzdem null.
    Dank dir weiß ich jetzt auch warum: das Layout ändert sich!
    Dazu hole ich mal ein bisschen aus. Ich habe einen Listview mit gewöhnlichen TextViews - ohne jede Aktion. Am Ende der Liste habe ich besagten Button (kein footer) und ich wußte nichts Besseres um den Button ans Ende der Liste zu zaubern, als das Layout zu ändern.
    Wann wäre denn in dieser Situation ein geeigneter Zeitpunkt, den cklicklistener anzuhängen? Wie schon gesagt, zum Zeitpunkt onListItemClick hab ich den View im Zugriff, aber da ist es zu spät.

    Schönes Valpurgis!
    Der Schwede
     
  9. swordi, 30.04.2011 #9
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    warum hängst den button nicht ins layout genau unter der liste??

    kannst ja nicht einfach das layout ändern :D
     
  10. Schwede, 30.04.2011 #10
    Schwede

    Schwede Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2011
    Für einen Button ist das okay, im Layout unter der Liste noch einen Button anzuhängen ( und das werde ich auch gleich machen). Was ist aber wenn man eine Liste mit unterschiedlichen Layouts braucht? (Z.b. Zwischenüberschriften)? Da muss man doch auch das Layout switchen. Zumindest habe ich das mal bei einer Google-Suche so gelesen.
     
  11. swordi, 30.04.2011 #11
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    schau dir die expandablelistview an

    damit kannst du zwischenüberschriften super machen :D

    layouts switchen macht man einfach nicht. das ist nicht wirklich vorgesehen.
     
    Schwede bedankt sich.
  12. Schwede, 30.04.2011 #12
    Schwede

    Schwede Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2011
    Danke für diesen und alle anderen Tipps! Habe eben den Button unterhalb des Listviews ins Main-Layout des ListViews eingebaut, meinen Listadapter wieder mit einem einzigen Layout betrieben (ist u.a. auch sinnvoll, weil sonst die Performancevorteile von if (convertView == null) nicht genutzt werden können) und es funzt! Fazit: 1 Woche jeden Abend daran gearbeitet, dass man mit einem Button einen ListView schließen kann. ;-)
    Aber dafür hab ich gewaltig 'was gelernt!
    Freu mich schon auf die weitere Zusammenarbeit!
    Der Schwede
     
  13. swordi, 01.05.2011 #13
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    naja - wer denkt man kann innerhalb von 1 tag gute apps entwickeln, wird sehr schnell bemerken, dass dahinter sau viel arbeit steckt.

    der anfang ist nunmal schwer, aber geduldig bleiben zahlt sich aus :D
     

Diese Seite empfehlen