J'ai une classe qui est en train d'étendre Activity et j'ai des méthodes comme findViewById, ArrayAdapter etc. Je veux la transformer en une classe indépendante mais toutes les méthodes ci-dessus deviennent indéfini. Quel est le problème? L'importation des classes ne devrait-elle pas être suffisante? Par exemple, j'importe android.view.View pour findViewById mais cela ne fait aucune différence. S'il vous plaît aviser.en utilisant findviewbyid dans une classe qui N'EXTENUE PAS d'activité dans android
Répondre
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 le findViewById()
méthode, vous pouvez le faire comme ceci:
EditText txt = (EditText)this.activity.findViewById(R.id.txt);
findViewById est méthode publique non statique de la classe Activity
, il ne sera disponible que pour un Activity
objet. Par conséquent, l'importation android.view.View
et android.app.Activity
ne le rendra pas disponible. Pour le rendre disponible, vous pouvez faire circuler un objet Actvity
- généralement un point this
dans votre activité. Toutefois, notez que vous devez toujours mettre à jour votre vue dans le thread d'interface utilisateur.
Ok je comprends pourquoi il est pas disponible, mais est findViewById pas une méthode de la classe View? Aussi pourriez-vous expliquer pourquoi nous devrions toujours mettre à jour notre vue dans le fil de l'interface utilisateur (faites-vous référence à l'activité principale?)? – Namratha
si vous voulez appeler une fonction qui appartient à Activity
alors seule chose que vous devez avoir est le contexte de la Activity
.
par ex.
class A extends Activity{
Context ctx;
void oncreate(Bundle b)
ctx = this;
B bob = new B(ctx);
}
}
est ici classe B.
Class B
{
B(Activity a)
{
a.anyFunctionOfActivity();
}
}
Cela ne fonctionnerait pas dans un AsyncTask –
@IgorGanapolsky même ici. Que devrait-on faire pour que cela fonctionne dans AsyncTask? –
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);
- 1. Android findViewById en service
- 2. findViewById() ne fonctionne pas dans une classe non MainActivity
- 3. findviewbyid ne fonctionne pas en android
- 4. Android: findViewById dans un fichier non main.xml
- 5. findViewById() ne fonctionne pas lorsque vous utilisez une classe séparée
- 6. Android: comment faire en sorte que findViewById (R.id.xxx) fonctionne dans une classe héritant/s'étendant de la classe View?
- 7. FindViewById n'est pas défini?
- 8. Mono pour Android, FindViewById Une CheckBoxPreference?
- 9. Android findViewById pour une mise en page parent
- 10. Android findViewById Travailler Parfois
- 11. Essayer d'initialiser des widgets dans Android en utilisant une classe distincte, obtenir une exception NullPointerException
- 12. Android findViewById renvoie null lorsqu'il est utilisé dans une classe autre que l'activité principale
- 13. Android: findViewbyID undefined
- 14. Activité Android findViewById() est nul
- 15. Android question EditText findViewById
- 16. android: findViewById retourne NULL lorsque les accès d'une autre classe
- 17. findViewById lève une RuntimeException
- 18. Création d'une classe dans la méthode android findViewById() est undefiend - Android
- 19. Pourquoi "findViewById" renvoie null dans la méthode oncreate pour android?
- 20. en utilisant openFileOutput() dans une classe. (pas une activité)
- 21. FindViewById Null en cas d'utilisation en classe enfant
- 22. en studio android ne peut pas résoudre la méthode « findViewById »
- 23. Android findViewById avec une chaîne de variante
- 24. Comment appeler une classe (ce n'est pas une activité) dans une classe d'activité dans Android Studio?
- 25. findViewById dans le menu gonflé
- 26. provoque findViewById() ne pas travailler
- 27. findViewById (R.id.list) ne résout pas?
- 28. Obtention de NullPointerException dans une classe qui s'étend ListAdapter - Android
- 29. Android findViewById() avec onFling dans le problème ListView
- 30. Android: findViewById retournant NULL - ne pouvait pas savoir ce qui est mal?
Cela ne fonctionne pas. findViewById ne peut être appelé que sur Activité et non sur Contexte. J'ai essayé votre approche mais ça m'a quand même donné des erreurs. – Namratha
Donc, voir mon édition, il suffit de passer l'instance de l'activité intstead du contexte :) – Houcine
Ok, je l'ai fait :) Lorsque j'appelle findViewById sur l'objet Activity, le Listiew que j'essaie de trouver est NULL. Est-ce parce que je n'ai pas utilisé setContentView pour le fichier XML qui contient le ListView, avant? – Namratha