it-roy-ru.com

Ошибка: на нестатический метод 'findViewById (int)' нельзя ссылаться из статического контекста

Я использую Android Studio (бета), и при использовании этого Java-кода в onCreateView () я получаю сообщение об ошибке.

ListView listView = (ListView) findViewById(R.id.someListView);

Это ошибка:

Non-static method 'findViewById(int)' cannot be referenced from a static context

Как это исправить?

13
CDuck

Предполагая, что у вас есть статический фрагмент внутреннего класса внутри действия: вы пытаетесь вызвать функцию findViewById(), которую вы не можете сделать в статическом внутреннем классе, который не содержит ссылку на родителя.

В onCreateView() вам нужно вызывать его в корневом представлении, которое вы только что надули, например.

 ListView listView = (ListView) rootView.findViewById(R.id.someListView);
26
laalto

onCreateView() не должен быть статическим методом (я предполагаю, что вы определяете его в классе Activity), поэтому вы должны делать что-то не так.

2
Eran

Если вы используете его в статическом AsyncTask или любом другом классе, вы можете передать действие в качестве параметра методу или конструктору, например:

деятельность по созданию:

//Pass activity variable (this)
new Main2Activity.MyTask().execute(this);

класс внутри деятельности:

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

Внутри класса деятельности

 static ListView listView;
 listView = (ListView) this.findViewById(R.id.someListView);

OR

создать внутри fragClass (статический) 

  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;
}

Вы можете реализовать это сейчас ... Используйте view variable для доступа к XML-объектам пользовательского интерфейса в oncreateView и getActivity (). FindViewById (...) для доступа к другому, чем метод onCreateView ().

0
Nadeem Iqbal