Mit findviewbyid in einer Klasse, die NICHT erweitern Aktivität in Android

Ich habe eine Klasse, die derzeit erweitert Aktivität und ich habe Methoden wie findViewById, ArrayAdapter etc. Ich möchte es in eine unabhängige Klasse, aber alle oben genannten Methoden werden undefiniert. Was ist das Problem? Sollten die Klassen nicht importieren? Zum Beispiel, ich importiere android.view.View für findViewById aber es macht immer noch keinen Unterschied. Bitte beraten.

  • ActivityManager: Ausnahme beim Start von Aktivitäten java.lang.IllegalArgumentException: val.length> 91
  • Lesen Sie ApplicationManifest von Android Application (apk) mit .NET
  • Wie benutzt man Facebook Access Token in Android App Webview
  • Android: Fragment Overlay ein anderes Fragment mit semi transparent
  • Abziehbare Ressource von Uri abrufen
  • Kann nicht finden, symbol class Builder
  • So stellen Sie eine Dialog-Themen-Aktivitätsbreite auf die Bildschirmbreite ein?
  • Erlaubnis verweigert (fehlende INTERNET-Berechtigung?): Aber die Erlaubnis ist gegeben
  • Wie benutzt man BottomSheetDialog?
  • ImageView zeigt kein Bild an, wenn es von setImageBitmap () gesetzt wird
  • Wie bestelle ich meine SQLITE-Datenbank in absteigender Reihenfolge, für eine Android-App?
  • Wie kann ich das Widget.TextInputLayout mit der MaterialSpinner-Ansicht ausrichten?
  • 4 Solutions collect form web for “Mit findviewbyid in einer Klasse, die NICHT erweitern Aktivität in Android”

    Du solltest die Instanz deiner Aktivität auf deine zweite Klasse auf dem Konstruktor wie folgt übergeben:

    In deiner Activity Instanziere deine Klasse wie folgt:

     MyClass instance = new MyClass(this); 

    Und in deiner zweiten Klasse wird der Konstruktor so sein:

     public class MyClass { public Activity activity; //.... other attributes public MyClass( Activity _activity){ this.activity = _activity; //other initializations... } } 

    Und dann, wenn du die findViewById() Methode verwenden findViewById() , kannst du das auch machen:

     EditText txt = (EditText)this.activity.findViewById(R.id.txt); 

    Wenn du irgendeine Funktion anrufen willst, die zur Activity gehört, dann ist nur das, was du brauchst, der Kontext der Activity .

    z.B.

     class A extends Activity{ Context ctx; void oncreate(Bundle b) ctx = this; B bob = new B(ctx); } } 

    Hier ist Klasse B.

     Class B { B(Activity a) { a.anyFunctionOfActivity(); } } 

    FindViewById ist eine nicht statische öffentliche Methode der Activity , also nur für ein Activity Objekt verfügbar. Deshalb importiere android.view.View und android.app.Activity wird es nicht zur Verfügung stellen. Um es verfügbar zu machen, könntest du ein Actvity Objekt passieren – in der Regel ein Punkt in deiner Aktivität. Beachten Sie jedoch, dass Sie Ihre Ansicht immer im UI-Thread aktualisieren sollten.

    Bitte versuche folgendes:

     public static View getLayoutByRes(@LayoutRes int layoutRes,@Nullable ViewGroup viewGroup) { final LayoutInflater factory = getSystemService(Context.LAYOUT_INFLATER_SERVICE); return factory.inflate(layoutRes, viewGroup); } TextView tv = (TextView) getLayoutByRes(R.layout.xxx ,Null).findViewById(R.id.editd); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.