Android 在oncreate() 方法中调用 findViewById 返回 null 问题的原因和解决方法
原因分析:
oncreate() 方法用于初始化页面,只有完成oncreate(Bundle) 方法后,页面中的控件才能通过findViewById方法获取到。
在网上查询解决方案时,有下面这种解决方案:
setContentView(id);
findViewById(id);
即,在setContentView(id) 后面调用 findViewById(id) 方法就可以获取到相应的控件。
经验证,返回值依然是null. 我用的是android4.0, 如有实验成功的,希望分享一下经验。
下面这个链接,是简单介绍Activity生命周期的帖子,
希望看下,看完后,对我提供的解决方案可能会更加的理解:
http://www.cnblogs.com/kofi1122/archive/2011/04/10/2011772.html
问题的解决方案:
根据Android 中 Activity 生命周期,和每个周期的工作来看。
oncreate() 方法创建了activity,并加载了页面的布局和控件;
onstart() 方法,经过oncreate()方法之后,页面中的相关控件都已经被加载,因此在这里,我们就可以直接调用 findViewById(id); 来获取我们需要的控件了。
代码如下所示:
@Override
protected void onStart() {
super.onStart();
// 加载图片
ImageView imageView = (ImageView)findViewById(R.id.img_latepate_randcode);
imageView.setImageBitmap(bitmap);
}
PS:
这里只提供了一种解决方案
我没有解决在oncreate() 方法中通过 findViewById() 来获取相关控件的问题,
而是借用Activity的生命周期规则,将想关操作放到了onStart() 方法中进行。
相关推荐
findViewById是Android中获取界面元素对象的方法,但是有时候它会返回null,从而导致应用程序崩溃或出现异常。下面将详细介绍AndroidGUI27中findViewById返回null的快速解决办法。 一、findViewById返回null的原因 ...
在Android开发过程中,`findViewById`方法是用于查找指定ID的视图对象,但有时我们可能会遇到`findViewById`返回`null`的情况。这个问题通常出现在尝试访问一个尚未初始化或者不存在于当前视图层次结构中的视图时。...
在`onCreate`方法中,实例化WebView、设置WebViewClient和加载网页: ```java WebView webView = findViewById(R.id.web_view); webView.setWebViewClient(new MyBrowserAPI()); webView.loadUrl("file:///android_...
通过上述步骤和注意事项,可以有效地避免在Android应用中因`findViewById`返回NULL而导致的问题。确保正确地设置和初始化视图,以及在合适的时间进行查找操作,可以显著提高代码的稳定性和可维护性。
Android 调用 C 语言实现内存的读取与修改的方法示例 Android 作为一个基于 Linux 的移动操作系统,从诞生之初就支持使用 C 语言来开发 native 代码,以便更好地与 Linux 内核进行交互。随着 Android 的发展,使用 ...
在Android平台上,调用前后置摄像头进行拍照是常见的功能,主要应用于各种社交、影像类应用。下面我们将详细探讨如何实现这一功能。...通过理解和实践这些知识点,你将能够更熟练地处理Android中的相机功能。
本教程将详细讲解如何在Android应用中调用百度地图,并实现Activity和Fragment中的定位功能。 首先,我们需要在Android项目中引入百度地图SDK。这通常通过在build.gradle文件中添加依赖来完成。在app模块的build....
本篇将详细讲解如何在Android应用中调用OpenCV来实现摄像头功能。 首先,我们需要在Android项目中集成OpenCV库。这可以通过在`build.gradle`文件中添加依赖项来完成。添加如下代码到你的`dependencies`块: ```...
在Android应用开发中,用户可能需要上传或者更换他们的头像,这时就需要调用系统的相机或者相册功能。本文将详细讲解如何实现这一功能。 首先,我们需要在AndroidManifest.xml文件中添加必要的权限,以便访问相机和...
本文将详细讲解如何在Android中调用系统相机和相册,并实现图片的裁剪功能。我们将通过一个简单的示例项目——`testDemo02`来深入理解这个过程。 首先,我们需要在AndroidManifest.xml文件中添加必要的权限,以便...
首先,确保在OnCreate方法中调用MapView的initialize方法,然后在OnResume和OnPause方法中分别调用onResume和onPause。此外,还要记得在OnDestroy中释放资源。 ```java private MapView mapView; private GoogleMap...
在`onCreate()`方法中,初始化SurfaceView和MediaRecorder对象,并设置SurfaceHolder的回调: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...
以下将详细阐述Android中获取根View的方法以及其应用场景。 一、通过findViewById()方法获取 这是最常见的方式,通常在Activity的onCreate()方法中执行。首先需要确保已经调用了setContentView()方法来设置布局...
- 在Activity的onCreate()方法中初始化MapView,并设置百度地图的显示级别和中心点: ```java MapView mapView = findViewById(R.id.bmapView); BaiduMap baiduMap = mapView.getMap(); baiduMap.setMapType...
在Android开发中,调用百度地图API来获取设备的经纬度是一项常见的任务,这有助于实现各种定位相关的功能,如导航、位置服务等。本篇文章将详细介绍如何在Android应用中集成百度地图API,进行定位并获取经纬度信息。...
- 在应用启动时初始化百度地图SDK,通常在Application类或者Activity的onCreate方法中调用`SDKInitializer.initialize()`方法进行初始化。 #### 三、实现监听百度地图缩放事件 1. **创建Activity**: - 首先,...
首先,我们要了解在Android中读取通讯录的权限管理。自Android 6.0(API级别23)开始,系统实行了运行时权限模型,读取通讯录权限不再是默认授予的,而是需要在应用运行时动态请求。在AndroidManifest.xml文件中,...
在Activity的`onSaveInstanceState()`和`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle savedInstanceState)`中分别调用这两个方法。 ```java @Override protected void ...
在Android应用开发中,RecyclerView是一个极其重要的组件,用于展示可滚动的数据列表。它取代了旧的ListView,提供了更高效、更灵活的布局管理。在本教程中,我们将深入探讨如何在RecyclerView的条目中添加按钮,并...
这个压缩包文件“安卓Android源码——安卓调用百度地图,实现定位和搜索功能.zip”提供了示例代码,帮助开发者了解如何在Android应用中调用百度地图服务。以下是对这些功能的详细讲解: 首先,我们需要在项目中添加...