OnClickListener für Buttons in einer ListActivity

G

Gecko0815

Neues Mitglied
0
Hallo!

Ich habe eine ListActivity wie die aus dem Listen-Beispiel 14 der API-Demos nachgebaut (List14.java | Android Developers), mit der Änderung, dass nicht ein Bild und eine TextView, sondern drei Buttons angezeigt werden, die anschließend den Inhalt einer MySQL-Tabelle, die mittels PHP-Scripts geladen wird, anzeigen sollen.

Jetzt möchte ich, dass man ein Element auswählen kann, um den entsprechenden Wert zu ändern, was allerdings am OnClickListener scheitert.

Code:
            holder.nameButton.setText(tableValues[position][1]);
            holder.nameButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    
                    Log.i(TAG,"nameButton pressed!\n"+v.toString());
                }
                
            });

Dieser Ausschnitt aus der getView in der Klasse MyAdapter ist mein Problem: Die Ausgabe im Log funktioniert, allerdings ist das auch so ziemlich alles,was ich machen kann - denn ich kann weder Toast-Nachrichten schicken ("No enclosing instance of the type MyTable is accessible in scope") - Anm.: MyTable heißt die ListActivity - noch kann ich eine Prozedur/Funktion aufrufen, die das macht (die soll "static" sein, was allerdings dann diese funktionsunfähig macht), ich kann keine Variablen verwenden (diese müssen final sein, damit er sie innerhalb des onClick verwenden kann), etc.

Hat jemand eine Idee, wie man dieses Problem am Effektivsten lösen kann? Ich wäre auch für Alternativvorschläge zwecks Darstellung von Tabellen in Android dankbar!

Vielen, vielen Dank im Voraus :)
 
Hat keiner eine Idee? :crying:
 
Das alles machst du innerhalb der MyTable Klasse? Dann kannst du mit MyTable.this.* auf Methoden und Variablen zugreifen.
 
Mittels MyTable.this.* kann ich nicht auf die Variablen/Prozeduren zugreifen. Die Struktur sieht folgendermaßen aus:

Code:
public class MyTable extends ListActivity {
     .....

     private static class MyAdapter extends BaseAdapter {
          .....
          public View getView(int position, View convertView, ViewGroup parents) {
               ViewHolder holder;

               .....

               holder.nameButton.setText(tableValues[position][1]);
               holder.nameButton.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                         Log.i(TAG,"nameButton pressed!\n"+v.toString());
                    }
               });
          }

          static class ViewHolder {
               Button nameButton;
          }
     }

     .... (restliche Prozeduren/Funktionen)

Innerhalb von dieser onClick-Prozedur versuche ich, Toast-Nachrichten zu schicken bzw. auf Variablen zuzugreifen, nur klappt das aufgrund der im ersten Post beschriebenen Fehlern nicht. Die Struktur, nach der ich die ListActivity aufgebaut habe, hab ich von den API-Demos vom Android-SDK übernommen und eben an meine Vorstellungen angepasst - allerdings wird in den Demos kein onClickListener behandelt.

Sinn der Sache ist der, dass eine MySQL-Tabelle heruntergeladen wird (mittels PHP-Scripts) und die Werte in Buttons (um sie anzuklicken und daraufhin ändern zu können) anzuzeigen. Wie gesagt, wenn es andere Lösungen gibt, die das schöner/eleganter lösen (wovon ich stark ausgehe ;) ) wäre ich natürlich auch für solche Vorschläge dankbar :)
 
Mach mal das static bei deinem Adapter weg.
 
Hey, das klappt :)
Er beschwert sich zwar immer noch, wenn ich Variablen aufrufen will, dass sie nicht final sind, aber ich kann zumindest außerhalb liegende Prozeduren aufrufen - die Variablen, die ich benötige, kann ich vor dem Hinzufügen des onClickListeners als zusätzliche, temporäre Variablen (die dafür final sind), verwenden.

Vielen Dank! :thumbsup:
 

Ähnliche Themen

D
  • Data2006
Antworten
14
Aufrufe
449
jogimuc
J
A
  • AnimaAngelo85
Antworten
1
Aufrufe
313
swa00
swa00
MES
Antworten
10
Aufrufe
787
MES
MES
Zurück
Oben Unten