Wie kann ich eine Funktion in meiner Hauptaktivitätsklasse aus einer benutzerdefinierten Galerieansicht in Android aufrufen?

Ich habe eine benutzerdefinierte Galerieansicht, in der ich einige Methoden übergebe. Ich möchte in der Lage sein, eine Funktion in meiner Haupttätigkeit von dieser Klasse zu nennen. Wie gebe ich einen Hinweis auf meine Hauptklasse?

Ich dachte, ich würde einfach die Klassenreferenz in CustomGallery durch Erstellen einer Setterfunktion —> g.setBaseClass (this);

  • Wo ist Eclipse Marketplace im Android SDK
  • GSON erwartete BEGIN_ARRAY aber war BEGIN_OBJECT
  • Parallaxeffekt in Android ViewPager
  • FileNotFoundException: res / drawable-xhdpi-v4 / foo.png in Play Store Crash-Logs nur
  • USB-Treiber für HTC OneVX (USB Debugging)
  • Stummschreiben, um Token mit GoogleApiClient abzurufen
  • CustomGallery g = (CustomGallery) findViewById(R.id.playSelectionGallery); g.setSpacing(10); g.setCallbackDuringFling(false); g.setAdapter(new ImageAdapter(this)); g.setSelection(1); registerForContextMenu(g); g.setBaseClass(this); 

    Problem ist das ist vom Typ Kontext und someFunctionToCall () wird in einem nicht ein Mitglied dieses Klassenfehlers führen. In meiner benutzerdefinierten Klasse habe ich:

     public void setBaseClass(Context baseClass) { _baseClass = baseClass; } private void callSomeFuntionOnMyMainActivityClass() { _baseClass.someFunctionToCall(); } 

    Alles, was ich tun möchte, ruft zurück zu meiner Hauptklasse, genannt ViewFlipperDemo. Das wäre einfach in As3. Irgendwelche Gedanken? Hoffentlich vermisse ich etwas ganz einfaches.

  • Wie kann man die Erhöhung eines AppBarLayout programmgesteuert in der Android Support Library v24.0.0 einstellen?
  • Suche nach einer Alternative für iScroll (Scrolling Div's auf iOS / Webkit)
  • Wie kann man zwischen Android und iOS teilen
  • Android BroadcastReceiver, Auto-Run-Service nach einem Neustart des Geräts
  • Seek Bar Erhöhung Höhe
  • Kann eine Pause-Aktivität nicht beenden, bis sie den Fokus wiederherstellt
  • One Solution collect form web for “Wie kann ich eine Funktion in meiner Hauptaktivitätsklasse aus einer benutzerdefinierten Galerieansicht in Android aufrufen?”

    Das ist eigentlich keine gute Idee … aber du kannst es so machen:

     private void callSomeFuntionOnMyMainActivityClass() { ((ViewFlipperDemo)_baseClass).someFunctionToCall(); } 

    Was Sie stattdessen tun sollten, ist die Implementierung eines einfachen Beobachters, der Ihnen erlaubt, die Aktivität zu benachrichtigen, dass etwas passiert ist. Das ist einer der wichtigsten OO-Prinzipien, Ihre benutzerdefinierte Klasse sollte nichts über Ihre Aktivitätsklasse wissen.

    Observer Muster Beispiel

    Die Observer-Schnittstelle:

     // TheObserver.java public interface TheObserver{ void callback(); } 

    Ihre benutzerdefinierte Ansicht:

     public class CustomGallery{ private TheObserver mObserver; // the rest of your class // this is to set the observer public void setObserver(TheObserver observer){ mObserver = observer; } // here be the magic private void callSomeFuntionOnMyMainActivityClass(){ if( mObserver != null ){ mObserver.callback(); } } // actually, callSomeFuntionOnMyMainActivityClass // is not a good name... but it will work for the example } 

    Dies ist die Aktivität, die von dem Beobachter profitieren wird (beachten Sie, dass jetzt können Sie Ihre benutzerdefinierte Ansicht auf verschiedene Aktivitäten nicht nur eine, das ist einer der wichtigsten Gründe, um es auf diese Weise zu implementieren):

     public class YourActivity extends Activity{ // your normal stuff bla blah public void someMethod(){ CustomGallery g=(CustomGallery)findViewById(R.id.playSelectionGallery); g.setObserver(new TheObserver(){ public void callback(){ // here you call something inside your activity, for instance methodOnYourActivity(); } }); } } 

    Sie werden feststellen, dass dieses Design-Muster (Beobachter) weit verbreitet in Java und Android verwendet wird … fast jede Art von UI-Event wird mit Beobachtern ( OnClickListener , OnKeyListener , etc.) implementiert. Übrigens habe ich den Code nicht getestet, aber es sollte funktionieren.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.