android:ActionBarActivity findViewById的返回为NULL

由于android版本的不断升级,新的版本通常会修改不少api及其他内容。

在API=19时,由于MainActivity继承了ActionBarActivity类,舍弃了以前所使用的Activity,

1 public class MainActivity extends Activity    //旧版本的继承关系


 1 public class MainActivity extends ActionBarActivity {     //新版本的继承关系
2
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_main);
7
8 if (savedInstanceState == null) {
9 getSupportFragmentManager().beginTransaction()
10 .add(R.id.container, new PlaceholderFragment()).commit();
11 }
12 }

................
13 }

同时对资源文件res中的layout文件也重新进行了设计,将一个main.xml改为了现在的两个xml文件:activity.xml和fragment_main.xml

因此,如果直接套用老版本的操作在新版本中实现,就会可能产生bug;例如:调用函数findViewById

在老版本中,此函数可以直接在onCreate函数中调用,但是在新版本中则不行,直接调用此函数得到的返回值都会为NULL;

要想调用此函数,需要重载onStart()函数,在onStart()中调用findViewById


 1 @Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.activity_main);
5
6 if (savedInstanceState == null) {
7 getSupportFragmentManager().beginTransaction()
8 .add(R.id.container, new PlaceholderFragment()).commit();
9 }
10 }
11
12 protected void onStart(){
13 super.onStart();
14
15 Button mButton = (Button)this.findViewById(R.id.button1);
16 mButton.setOnClickListener(new OnClickListener(){
17 public void onClick(View v)
18 {
19 Intent intent = new Intent();
20 intent.setClass(MainActivity.this, AnotherActivity.class);
21 startActivity(intent);
22 }
23 });
24 }

原因:

个人分析,很可能是由于将原先的布局文件layout中的main.xml拆分成activity.xml和fragment_main.xml,而导致的;

因为在onCreate中调用了setContentView(R.layout.activity_main),此函数只是将activity_main.xml设置成了app视图,但是此时程序还没有导入fragment_main.xml;

以至于只有在onstart周期时,才被允许获取activity_main.xml中的组件资源

android:ActionBarActivity findViewById的返回为NULL,布布扣,bubuko.com

时间: 2024-10-06 12:15:09

android:ActionBarActivity findViewById的返回为NULL的相关文章

Android ActionBar 返回为NULL

AndroidBar返回为NULL.是因为values-v11和values-v14下面的style的主题的设置的原因. 在SDK 11的设备上,会使用第二处,SDK 14会使用第三处. 只需要将三个地方的主题分别设置就可以,结构如下: values-------- <resources> <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res

android - Fragment getView() 总是返回null

如果你在使用Fragment的时候,有时会遇到调用Fragment.getView()的时候,总是返回一个null值. 可能出现此问题的原因是,你在Activity中,调用adapter.getItem()来获取当前Fragment. 大概如下 int index= _viewPaper.getCurrentItem(); Fragment fragment=_myFragmentAdapter.getItem(index); //这一步总是返回null值 View view= fragment

(Android review)打开Activity返回结果

一.基本知识点 其实要完成这个功能很简单: 1.MainActivity startActivityForResult(intent, 100);//第二个是请求码 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(data != null){ if(r

Android WindowManager 监听返回键及home键

一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private final static BroadcastReceiver homeListenerReceiver = new BroadcastReceiver() { final String SYSTEM_DIALOG_REASON_KEY = "reason"; final String SYS

android webview点击返回键返回上一级activity

android webview点击返回键返回上一个activity 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method stub 4 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 5 return true; 6 } 7 return super

android webview点击返回键回到上一个html

android webview点击返回键返回上一个html 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { 4 mWebView.goBack();// 返回前一个页面 5 return true; 6 } 7 return super.onKeyDown(keyCod

android 按两次返回键退出

我们可以在很多应用中都能看到按两次返回键退出 , 其实这个功能实现很容易, 下面就是实现的代码 , 把它放到你的程序中你的程序就能按两次返回键退出啦  , 这个功能是为了避免误点而把程序退出了 ,给你的程序也加上这个简单实用的功能把 : package com.xuchao.test; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.widget

[转]Android 如何监听返回键,弹出一个退出对话框

本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. 注:如下代码当时是从网上copy过来的,现在忘了它出自哪个原作者了,在此说声抱歉. 源码如下: [html] view plaincopyprint? public class BackKeyTest extends Activi

android 细节之禁用返回键

今天项目中需要使用自己actionBar中的返回键,用的方法就是上次我记录下的父亲activity的方法 android.support.PARENT_ACTIVITY 详情请移步:http://blog.csdn.net/yiding_he/article/details/38410151 (android 细节之 menu 之 invalidateOptionsMenu) 今天的问题是禁用系统的返回键,禁用home键应该是需要permission,而且禁用后用户体验不够.所以项目中我们防止用