错误:非静态方法' findViewById(int)'无法从静态上下文引用

时间:2014-08-18 15:38:39

标签: java android android-listview android-studio

我正在使用Android Studio(Beta),在使用此版本的代码时,我收到错误。

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

这是错误:

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

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:26)

假设你在一个活动中有一个静态片段内部类:你试图调用活动的findViewById(),你不能在一个静态的内部类中调用它。引用父母。

onCreateView()中,您需要在刚刚膨胀的根视图上调用它,例如

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

答案 1 :(得分:2)

onCreateView()不应该是静态方法(我假设你在Activity类中定义它),所以你一定做错了。

答案 2 :(得分:1)

如果您在静态AsyncTask或任何其他类中使用它,则可以将活动作为参数传递给方法或构造函数,例如:

活动onCreate:

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

答案 3 :(得分:0)

@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 变量访问oncreateView和getActivity()中的xml ui。findViewById(...)以访问其他onCreateView()方法。

答案 4 :(得分:0)

Inside Activity类

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

OR

创建inside fragmentClass(静态)

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