Question

J'ai une classe qui étend actuellement l'activité et j'ai des méthodes telles que findViewById, ArrayAdapter etc. Je veux en faire une classe indépendante, mais toutes les méthodes ci-dessus deviennent non définies. Quel est le problème? Ne devrait pas importaient les classes suffisant? Pour exemple, importer des android.view.View pour findViewById, mais il fait encore aucune différence. S'il vous plaît conseiller.

Était-ce utile?

La solution

vous devez passer l'instance de votre activité à votre deuxième classe sur le constructeur comme ceci:

Dans votre Activity Instancier votre classe comme ceci:

MyClass instance = new MyClass(this);

Et dans votre deuxième classe, le constructeur sera comme ceci:

public class MyClass {

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

public MyClass( Activity _activity){

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

}
}

et puis quand vous voulez utiliser la méthode findViewById(), vous pouvez faire comme ceci:

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

Autres conseils

si vous voulez appeler une fonction qui appartient à Activity alors seule chose que vous avez besoin est du contexte Activity.

par exemple.

class A extends Activity {
    Context ctx;

    void onCreate(Bundle b)
        ctx = this;
        B bob = new B(ctx);
    }
}

Voici la classe B.

class B {

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

findViewById est méthode publique non statique de la classe Activity , soit il disponible que pour un Activity objet . Par conséquent, android.view.View d'importation et android.app.Activity ne le rendre disponible. Pour cela mettre à la disposition, vous pouvez passer autour d'un objet Actvity - généralement un point de this dans votre activité. Toutefois, notez que vous devez toujours mettre à jour votre vue dans le thread d'interface utilisateur.

S'il vous plaît essayez ce qui suit:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top