Frage

Ich habe eine Klasse, die derzeit die Aktivität erweitert, und ich habe Methoden wie FindViewById, ArrayAdapter usw. Ich möchte sie in eine unabhängige Klasse verwandeln, aber alle oben genannten Methoden werden undefiniert. Was ist das Problem? Sollte das Importieren der Klassen nicht genug sein? Für EG importiere ich Android.View.View für FindViewById, aber es macht immer noch keinen Unterschied. Bitte beraten.

War es hilfreich?

Lösung

Sie sollten die Instanz Ihrer Aktivität an Ihre zweite Klasse auf dem Konstruktor wie folgt übergeben:

In deiner Activity Instanziieren Sie Ihre Klasse wie diese:

MyClass instance = new MyClass(this);

Und in Ihrer zweiten Klasse die Konstrukteur wird so sein:

public class MyClass {

public Activity activity; 
//.... other attributes 

public MyClass( Activity _activity){

   this.activity = _activity;
//other initializations...

}
}

Und dann, wenn Sie das verwenden möchten findViewById() Methode, Sie können dies mögen:

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

Andere Tipps

Wenn Sie eine Funktion aufrufen möchten, die gehört Activity Dann müssen Sie nur einen Kontext des 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 Klasse, also ist es nur für a verfügbar Activity Objekt. Daher importieren android.view.View und android.app.Activity Ich werde es nicht zur Verfügung stellen. Um es zur Verfügung zu stellen, können Sie a um eine Actvity Objekt - normalerweise a this Zeigen Sie in Ihrer 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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top