变更到Android4.4的问题

更新到Android 4.4,写了个小程序。发现运行不起来了。抛空指针异常。debug模式下,发现在onCreate方法中获取Button是null。

Android 4.4把layout进行了重组,全部放到了Fragment下,在onCreate方法执行时,Fragment还没有被调用,所以在这个方法中获取Fragment中的Button是空值。新类中多了一个Fragment的内部类,当xml的Fragment被装载时,会调用内部类的onCreateView方法,所以要将所有之前在layout中而现在移到fragment中的操作全部移到此方法中进行。

package com.bignerdranch.android.geoquiz;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class TestActivity extends ActionBarActivity {

	private static Button mFirstButton;
	private static Button mSecondButton;

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

		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.test, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			final View rootView = inflater.inflate(R.layout.fragment_test, container,
					false);

			mFirstButton = (Button) rootView.findViewById(R.id.first_button);
			mFirstButton.setOnClickListener(new View.OnClickListener() {

				@Override
				public void onClick(View v) {
					Toast.makeText(rootView.getContext(), R.string.first_toast,
							Toast.LENGTH_SHORT).show();
				}

			});

			mSecondButton = (Button) rootView.findViewById(R.id.second_button);
			mSecondButton.setOnClickListener(new View.OnClickListener() {

				@Override
				public void onClick(View v) {
					Toast.makeText(rootView.getContext(), R.string.second_toast,
							Toast.LENGTH_SHORT).show();
				}

			});

			return rootView;
		}
	}

}

  

变更到Android4.4的问题,布布扣,bubuko.com

时间: 2025-01-18 11:06:22

变更到Android4.4的问题的相关文章

android4.4.2 短信广播变更

近期三星陆续放出android4.4.2ROM更新包,android4.4.2对短信虽说是放开了权限,但其实是加强了限制,一台手机智能通过一个设置为默认应用的短信应用软件才能发送短信,否则就无法对短信数据库进行操作. 以为只是对这个进行了变更, 认真观察android4.4.2 mms源码完,发现对短信的广播也进行了一些变更,有些厂家为了兼容会继续发送android.provider.Telephony.SMS_RECEIVED广播,但是有些厂家就不厚道了,在android4.4上就发送andr

Android4.4制作自有SDK探析

最近研究了一下android4.4制作自有SDK的东西.我们都知道,拿到Google的原始代码后,芯片公司会把它结合芯片去平台化,再发出芯片公司的SDK给客户,这种SDK通常情况下都是含全部工程代码环境的,当然里面有一些是以库形式发布的,是需要保密的.那么我们作为中游的技术公司,又有一定深度的功能定制.产品形态变更带来的SDK大量的修改,很多是费尽心血完成,当然这部分代码我们也是要完全保密的,及时我们把它包得再好,也费精力,还要给完整过程代码,好庞大,这种方式的延伸性不好,扩展性也不佳,同步代码

IDEA中Git分支未push的变更集如何合并到另一个分支

使用rebase命令 刚开始,A分支和B分支的代码是一样的,把A分支checkout 为当前分支,并且修改了代码,进行[commit]和[push],commit成功了,但是push没有权限. 这个时候在checkout 到B分支,之前的修改已经没有了,它被提交到了A分支上去了,该怎么办? 这时应该在上面的那个情况时(即当前先[Checkout]到A分支),然后选择B分支的[Checkout with Rebase]. 待成功后,就会把A分支已经提交(commit)过的变更集,在B分支上也提交(

变更路线节点。妈妈,我的强迫症有救啦!

UE里面布置蓝图对于一通乱七八糟的线无限闹心. 好在有工具,我终于不用放弃治疗啦. 1. 布线好帮手:变更路线节点 Reroute Node 2.为选中选项创建注释 缩小了蓝图一块一块的,看起来模块清晰,(大main函数程序狗救星) 3. 节点注释 文盲好帮手,看完就忘了什么意思,不要紧,写段中文注释压压惊 4. 合并成节点 Collapse To Node 来一场说合体就合体的恋爱.简单粗暴,把选中的节点合并到一起.解压缩还会复原到原位哦,你值得拥有 5. 合并成宏 Collapse To M

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

SQL Server 之 - 变更数据跟踪 1

某些应用程序(比如数据仓库系统)十分依赖于源系统的变更数据识别功能,它们期望源系统能够提供一种高效低识别变更数据的能力.在SQLServer 2008之前并没有原生态的解决方案,开发人员不得不通过使用触发器.时间戳以及额外的表来实现该功能,在SQL Server2008之后,数据库提供了两种原生态的特性:Change Tracking(变更追踪)及Change Data Capture(变更数据捕获). 功能对比 简单来讲,所谓变更可以简化为两个问题:①变更有没有发生以及变更的类型:②数据从什么

如何实现系统记录变更的记录功能

在程序操作中,我们需要把记录变更操作记录下来,通用权限管理系统正好有这个表,下面参照这个表创建自己的修改记录表,表结构如下 用代码生成器的截图如下 实体类 1 //----------------------------------------------------------------------- 2 // <copyright file="BASEMODIFYRECORDEntity.cs" company="ZTO"> 3 // Copyri

Xcode导出App一般问题及其解决方法(开发者协议变更及Bundle Id过期问题)

Xcode导出App一般问题及其解决方法 问题一:开发者协议变更问题. 变更后打包会出现如下图A警告,此时点击 "visit developer website"进入Apple开发者网站,登录开发者账号后会出现如图B后,点击"Review Agreement" 进入下一步确认同意条款即可. (图A) (图B) 问题二:Bundle Id过期(expired)问题 过期后打包过程会出现如图C的警告,此事,您需要登录到Apple Developer,(左侧)Certif

Ceph中国社区公众号正式变更,全新开始

清晨北京 再大的雾霾也会过去 今天正好北京的雾霾散去,空气瞬间变好,也赶上了Ceph中国社区公众号变更,我来讲述下Ceph中国社区的故事--一项开源技术和一群充满朝气的年轻人之间的故事.一个开源社区从建立到发展壮大,就像一个创业公司的奋斗史,跌宕起伏.谨以此文献给在过去两年多的时间中支持Ceph中国社区成长的每一个人. 美好的展望--Ceph中国社区雏形 2014年7月份,随着我开始接触OpenStack和Ceph,当初发现国内关于Ceph的资料是少之又少,唯一有几个QQ群还都是潜水员.当初讨论