web-dev-qa-db-fra.com

Erreur: La méthode non statique 'findViewById (int)' ne peut pas être référencée à partir d'un contexte statique

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?

13
CDuck

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);
26
laalto

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.

2
Eran

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);
        }
1
live-love

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);
0
Aravindh Gopi
@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 ().

0
Nadeem Iqbal