首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误:不能从静态上下文引用非静态方法'findViewById(int)‘

错误:不能从静态上下文引用非静态方法'findViewById(int)‘
EN

Stack Overflow用户
提问于 2014-08-18 23:38:39
回答 4查看 17K关注 0票数 15

我正在使用Android Studio (测试版),在'onCreateView()‘中使用这段java代码时,我得到了一个错误。

代码语言:javascript
复制
ListView listView = (ListView) findViewById(R.id.someListView);

这是错误:

代码语言:javascript
复制
Non-static method 'findViewById(int)' cannot be referenced from a static context

我该如何解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-18 23:49:15

假设在活动中有一个静态片段内部类:您正在尝试调用活动的findViewById(),但在不包含对父对象的引用的静态内部类中无法调用。

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

代码语言:javascript
复制
 ListView listView = (ListView) rootView.findViewById(R.id.someListView);
票数 30
EN

Stack Overflow用户

发布于 2014-08-18 23:40:19

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

票数 2
EN

Stack Overflow用户

发布于 2018-06-08 07:10:49

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

活动onCreate:

代码语言:javascript
复制
//Pass activity variable (this)
new Main2Activity.MyTask().execute(this);

类内部活动:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25367060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档