OnClickListener für Buttons in einer ListActivity

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Gecko0815, 09.09.2010.

  1. Gecko0815, 09.09.2010 #1
    Gecko0815

    Gecko0815 Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    17.08.2010
    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 :)
     
  2. Gecko0815, 14.09.2010 #2
    Gecko0815

    Gecko0815 Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    17.08.2010
    Hat keiner eine Idee? :crying:
     
  3. BenOtto, 14.09.2010 #3
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Das alles machst du innerhalb der MyTable Klasse? Dann kannst du mit MyTable.this.* auf Methoden und Variablen zugreifen.
     
  4. Gecko0815, 14.09.2010 #4
    Gecko0815

    Gecko0815 Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    17.08.2010
    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 :)
     
  5. BenOtto, 14.09.2010 #5
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Mach mal das static bei deinem Adapter weg.
     
  6. Gecko0815, 14.09.2010 #6
    Gecko0815

    Gecko0815 Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    17.08.2010
    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:
     

Diese Seite empfehlen