当前位置: 首页 > 知识库问答 >
问题:

为什么findViewById()方法只能在activity类的方法中工作,而不能直接在类中工作?

赵灼光
2023-03-14
public class MainActivity extends AppCompatActivity {

       TextView name_header;

       //this results into an error
       name_header = (TextView) findViewById(R.id.name_header);

       @Override
       protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.menu_order);

       //whereas, this works perfectly
       name_header = (TextView) findViewById(R.id.name_header);
...
 }
}

问题是,我试图使用findViewById()全局初始化TextView对象,但它在运行时抛出一个错误,然后,如果我在onCreate()或任何其他方法中使用它,初始化工作就会很好。

我正在为API级别22及以上开发

共有1个答案

邢承弼
2023-03-14

在setContentView(...)之前onCreate(...)中的函数已调用,则布局(-file)尚未膨胀/设置。所以现在还没有什么可以查id的。

正如Android文档所描述的:

公共T findViewById(int id)

查找由onCreate(Bundle)中处理的android:id XML属性标识的视图。

但是由于您已经“全局”声明了您的TextView,您可以在onCreate函数中初始化它,并在MainActivity的任何其他地方使用它,而不会有任何问题。

 类似资料:
  • 为什么这段代码中不允许函数?

  • 问题内容: 我了解抽象类中的方法都可以是抽象的,也可以不是。但是,为什么不能在“普通”的非抽象类中创建抽象方法呢? 在此先感谢您的解释! 问题答案: 抽象 方法从根本上说,该方法没有实现,需要在 子类中 实现。但是,如果您在 非抽象 类中具有 抽象 方法,则可以实例化该类并获取一个对象,该对象将具有未实现的方法,您将无法调用该方法。 __

  • 我试图在一个变量中保存得分为80分或80分以上的学生的姓名,但我无法使用filter进行保存,它返回整个对象,尽管我指定只打印这些对象的键值,即这些学生的姓名。 我的代码: 我怎样才能得到得分在80分以上的学生的名字?

  • 问题内容: 作为Android新手开发人员,我遇到了一个奇怪的问题。我想创建一个类,该类可以使用其他方法以任何特殊方式使用其他类- 活动。为了简单起见,我们将记录一些东西。如果我在一个活动中进行跟踪(例如在OnClick侦听器中),则一切正常: 但是,当我尝试将其封装到某个类中并像这样创建单例时: 并从其他活动中调用它 NullPointerException(与openFileOutput一致)

  • 我写了一个非常简单的代码(Hello World!)通过记事本,它编译得很好,但是当我累了运行它时,我收到一条消息说错误: 在类Test4中找不到Main方法,请将Main方法定义为:publicstaticvoidmain(String[]args)或JavaFX应用程序类必须扩展JavaFX.application.application。 当我使用NeatBeans时,可以,但是当使用CM提

  • 问题内容: 从上一个私有方法春天在什么@Transactional属性的工作? 使用代理时,应仅将@Transactional注释应用于具有公共可见性的方法。如果使用@Transactional注释对受保护的,私有的或程序包可见的方法进行注释,则不会引发任何错误,但是带注释的方法不会显示已配置的事务设置。 我可以想到排除和方法的充分理由,但是为什么方法不能在事务上表现呢?以下堆栈跟踪显示了公共方法