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

Aus Klasse auf Hauptklasse zugreifen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Mik, 27.03.2011.

  1. Mik, 27.03.2011 #1
    Mik

    Mik Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.03.2011
    Hallo

    bei meiner App habe ich die "ganz normale" Subklasse der Activity in der .java Datei mit einem Label, in Kurzform:

    Code:
    public class meineApp extends Activity {
    
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
    final TextView Anzeige = (TextView) findViewById(R.id.label);
    }
    
    Jetzt möchte ich einen CountDownTimer starten und die verbleibende Zeit auf dem Label anzeigen. Dazu brauche ich eine weitere Klasse, da CountDownTimer eine abstrakte Klasse in Java ist:

    Code:
    class MeinCountDownTimer extends CountDownTimer {
    
        public MeinCountDownTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void onFinish() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void onTick(long millisUntilFinished) {
        }
        
        
    }
    
    In der onTick Prozedur möchte ich jetzt die verbleibende Zeit auf dem Label anzeigen. Und das ist genau mein Problem: Wie greife ich auf das Label zu? Denn die Klasse MeinCountDownTimer kennt das Label "Anzeige" natürlich nicht, sprich

    Code:
    public void onTick(long millisUntilFinished) {
        Anzeige.setText(milisUntilFinished);
    }
    
    funktioniert aus diesem Grund nicht.

    Bin für für jede Hilfe dankbar. Ich rätsele da schon so lange dran rum... :-(

    Viele Grüße!
     
  2. DerSeppel, 27.03.2011 #2
    DerSeppel

    DerSeppel Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    8
    Registriert seit:
    16.03.2011
    Ich habs grade nicht im Kopf und auch meine Entwicklungsumgebung nicht parat, aber versuch mal über das application objekt drauf zuzugreifen. Immerhin ist deine "Anzeige" doch ein Objekt der Anwendung. (ggf. public setzen)
     
    Mik bedankt sich.
  3. ramdroid, 27.03.2011 #3
    ramdroid

    ramdroid Android-Experte

    Beiträge:
    644
    Erhaltene Danke:
    89
    Registriert seit:
    20.10.2010
    sonst kannst du in den MeinCountDownTimer eine Funktion setParent() oder so einbauen und dort die activity übergeben. weiß aber nicht ob das auch die elganteste Lösung ist!?
     
    Mik bedankt sich.
  4. maniac103, 27.03.2011 #4
    maniac103

    maniac103 Android-Lexikon

    Beiträge:
    1,237
    Erhaltene Danke:
    1,157
    Registriert seit:
    24.01.2011
    Die eleganteste Lösung wäre IMHO Anzeige als Klassenvariable anzulegen und MeinCountDownTimer als private Klasse innerhalb von meineApp anzulegen. Dann hat MeinCountDownTimer Zugriff auf die Klassenvariablen von meineApp.
     
    Mik bedankt sich.
  5. Mik, 27.03.2011 #5
    Mik

    Mik Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.03.2011
    Hallo,

    vielen Dank für eure Vorschläge! Habe es jetzt wie von maniac103 vorgeschlagen gemacht, weil mir das am einfachsten erschien. Wusste gar nicht, dass man Steuerelemente als Klassenvariablen deklarieren kann. Ich dachte, die gehören immer als final in die onCreate-Prozedur. Ob das jetzt besonders elegant ist, kann ich nicht einschätzen, aber auf jeden Fall funktioniert es! Daher besten Dank! :)
     
  6. DerSeppel, 27.03.2011 #6
    DerSeppel

    DerSeppel Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    8
    Registriert seit:
    16.03.2011
    Du kannst deiner Klasse auch einen Getter hinzufügen über den deine App dann den Wert bekommt. Wäre m.E. nach ein bisschen eleganter.
     

Diese Seite empfehlen