当前位置:文档之家› 由preference启动一个新的Activity

由preference启动一个新的Activity

由preference启动一个新的Activity
由preference启动一个新的Activity

android设置中的Preferencescreen用法介绍与分析

今天主要研究了一下设置中的Preferencescreen应用,它不仅可以作为设置界面显示,而且还能够启动activity,下面主要是对启动activity的介绍

1. Preferencescreen中启动activity

例如wireless_setting.xml中有如下片段

//注意这个是固定的值,没有这个,XML就不认识标签

android:key="wifi_settings"

android:title="@string/wifi_settings"

android:summary="@string/wifi_settings_summary" >

android:action="android.intent.action.MAIN"

android:targetPackage="com.android.settings"//这里的2个都是包名

android:targetClass="com.android.settings.wifi.WifiSettings" />

其中com.android.settings是工程的包名,com.android.settings.wifi.WifiSettings是要启动的类。

一般情况下,这样就ok了,点击对应的Preference就能够启动对应的activity,然而仅仅这样有时这样,并不一定能够启动对应的activity,因为它与回调函数onPreferenceTreeClick有关,有时候我们会重写这个方法如:

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {

if ( (preference == mAirplaneModePreference) &&

(Boolean.parseBoolean(

SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MO DE))) ) {

// In ECM mode launch ECM app dialog

startActivityForResult(

new

Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null), REQUEST_CODE_EXIT_ECM);

return true;

}

else {

// Let the intents be launched by the Preference manager

return false;

}

}

其中WirelessSetting.java中有如上函数,当返回值为true时,你怎么点击Preference

都不会跳转到activity的,只有等到它的返回值为false的时候,才可以正常跳转,因为点击某一个Preference的真正实现在Preference.java的performClick函数中如下:void performClick(PreferenceScreen preferenceScreen) {

if (!isEnabled()) {

return;

}

onClick();

if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) { return;

}

PreferenceManager preferenceManager = getPreferenceManager();

if (preferenceManager != null) {

PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager

.getOnPreferenceTreeClickListener();

if (preferenceScreen != null && listener != null

&& listener.onPreferenceTreeClick(preferenceScreen, this)) { return;

}

}

if (mIntent != null) {

Context context = getContext();

context.startActivity(mIntent);

}

}

当点击某个Preference时的调用流程是AdapterView.performItemClick--》

PreferenceScreen.onItemClick--》Preference.performClick--》

PreferenceActivity.onPreferenceTreeClick,当onPreferenceTreeClick返回true的时候就直接return了,没有走下面启动activity的地方了,因此要使一个Preference 能够正常跳转到另外一个activity有两个条件,一是xml里面是否设置正确,第二是调用该xml的java类是否在onPreferenceTreeClick这个函数需要返回false。

https://www.doczj.com/doc/f66808901.html,/wujiangming/article/details/6218068

其实,还不是可以在onPreferenceTreeClick函数里面写startActivity呀

android系统开机启动流程分析

一,系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二,内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境(内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系 统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init 会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。 三,Init进程启动 【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init. .rc脚本文件建立几个基本 服务(servicemanager zygote),然后担当property service 的功能 打开.rc文件,解析文件内容。【system/core/init/init.c】将service信息放置到service.list中【system/core/init/init_parser.c】。 建立service进程。【service_start(…) execve(…)】 在init.c中,完成以下工作 1、初始化log系统【解析/init.rc和init.%hardware%.rc文件,在两个 文件解析步骤2时执行“early-init”行动】 2、初始化设备【在/dev下创建所有设备节点,下载firmwares】 3、初始化属性服务器【在两个文件解析步骤2时执行“init”行动】

03-04-Android开发技术讲义 之启动另一个Activity

Android开发技术讲义之启动另一个 Activity 紧接着上一个练习,我们为上一个练习app添加一些代码,使之当我们点击send 按钮的时候能够启动另一个Activity。 任务 在文本框中输入消息,点击Send按钮,消息会显示在第二个Activity中。 对发送按钮进行响应 1.在res/layout目录中,编辑activity_my.xml 2.在

相关文档 最新文档