Prob mit finish() aus eigenem Baseadapter

S

Schwede

Neues Mitglied
0
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
 
warum soll dein listadapter die activity schließen???

da ist schonmal ein grundlegender fehler
 
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);
 
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
 
  • Danke
Reaktionen: Schwede
Das ist sauber! So mache ich das! Vielen Dank swordi!
 
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:
der button hat einen onclicklistener in der activity
aber den finde ich nicht. Hab schon versucht onClick(View v) zu überschreiben. Ist nicht geglückt.
Viele Grüße
 
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.
 
  • Danke
Reaktionen: Schwede
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
 
warum hängst den button nicht ins layout genau unter der liste??

kannst ja nicht einfach das layout ändern :D
 
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.
 
schau dir die expandablelistview an

damit kannst du zwischenüberschriften super machen :D

layouts switchen macht man einfach nicht. das ist nicht wirklich vorgesehen.
 
  • Danke
Reaktionen: Schwede
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
 
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
 

Ähnliche Themen

R
  • RudolfHagen
Antworten
1
Aufrufe
648
koje71
koje71
FabianDev
Antworten
5
Aufrufe
547
swa00
swa00
R
Antworten
3
Aufrufe
1.614
Ritartet
R
Zurück
Oben Unten