J'utilise Android Studio (Beta) et, lorsque j'utilise ce code Java dans 'onCreateView ()', un message d'erreur s'affiche.
ListView listView = (ListView) findViewById(R.id.someListView);
C'est l'erreur:
Non-static method 'findViewById(int)' cannot be referenced from a static context
Comment puis-je réparer ça?
En supposant que vous ayez une classe interne de fragment statique dans une activité: vous essayez d'appeler la fonction findViewById()
de l'activité que vous ne pouvez pas utiliser dans une classe interne statique qui ne contient pas de référence au parent.
Dans onCreateView()
, vous devez l’appeler dans la vue racine que vous venez de gonfler, par exemple.
ListView listView = (ListView) rootView.findViewById(R.id.someListView);
onCreateView()
ne devrait pas être une méthode statique (je suppose que vous la définissez dans une classe d'activité), vous devez donc faire quelque chose de mal.
Si vous l'utilisez dans une AsyncTask statique ou dans une autre classe, vous pouvez transmettre l'activité en tant que paramètre à une méthode ou à un constructeur, par exemple:
activité sur Créer:
//Pass activity variable (this)
new Main2Activity.MyTask().execute(this);
activité à l'intérieur de la classe:
private static class MyTask extends AsyncTask<Object, Void, String> {
Main2Activity activity;
@Override
protected String doInBackground(Object... params) {
activity = (Main2Activity)params[0];
....
}
@Override
protected void onPostExecute(String str) {
// Use parameter activity passed to class
WebView webView = activity.findViewById(R.id.web_view);
webView.loadData(str, "text/html; charset=UTF-8", null);
}
Dans la classe d'activité
static ListView listView;
listView = (ListView) this.findViewById(R.id.someListView);
OR
créer à l'intérieur fragmentClass (statique)
static ListView listView;
listView = (ListView) getActivity().findViewById(R.id.someListView);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_layout, container, false);
ListView listView = (ListView) view.findViewById(R.id.listviewID);
context = getActivity();
return view;
}
Vous pouvez le mettre en œuvre maintenant ... Utilisez view variable pour accéder aux choses xml ui dans oncreateView et getActivity (). FindViewById (...) pour accéder à une méthode autre que onCreateView ().