preference的使用(2) — preferencecategory && preferencescreen[亲测有效] -金沙1005

preference的使用(2) — preferencecategory && preferencescreen[亲测有效]上一节有讲到preference的基本使用跟api的

上一节有讲到preference的基本使用跟api的介绍 ,没有看的话请先阅读 

现在介绍其子类preferencecategory  跟 preferencescreen,现在看下继承关系preference的使用(2) --- preferencecategory && preferencescreen[亲测有效]

如上图,他们都是继承自preferencegroup的先看一下  preferencegroup

preferencegroup  是一个preference的集合,可以包含多个preference,这个从字面意思不难理解

类似view  跟viewgroup。看其api:

1.public void (boolean orderingasadded)

当一个preference被add进来的时候是否排序,如果是false的话,那么对于那些没有order的将根据里面的preference的order 跟 默认字母进行排序  。在add一个preference的时候,是不会重新排序的,需要在add之前调用这个方法,应该要在早一点调用这个方法,这个描述好抽象。

2.public boolean ()   当add一个preference的时候是否可以排序

3.public void ( preference)   被inflater 调用增加进来

查看源码:

  /**
     * called by the inflater to add an item to this group.
     */
    public void additemfrominflater(preference preference) {
        addpreference(preference);
    }
preference的使用(2) --- preferencecategory && preferencescreen[亲测有效]

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活clion
datagrip dataspell
dotcover dotmemory
dottrace goland
phpstorm pycharm
resharper reshac
rider rubymine
webstorm 全家桶
跟第六点差不多,就是没有返回值而已

4.public int ()   返回这个group中的preference的个数

5.public (int index)   返回group的第index元素。

6.public boolean ( preference)   add 一个 preference进来,但是位置跟order是有关系的,返回是否增加成功

7.public boolean ( preference)  从group中移除  返回是否移除成功

8.public void ( ) 移除所有的

9.public ( key)   根据key来找到一个preference,没有找到就返回null

如果有个相同key的preference,那么会返回前一个preference 

10.public void (boolean enabled)   group的enable ,如果false 那么这个group里面都无法响应click事件


有些方法不理解的,将在其子类中写使用代码:


现在看子类preferencecategory

preferencecategory  是一个preferencegroup的子类,而且是被禁用的,那么它就不可以被点击了,可以用于分类

在父类的基础上只有一个方法

public boolean ()  检测是否被enable了
 

preferencescreen 代表着preference的层次机构中的最顶层,为了显示这个类,需要一个

指向一个实例化的preferencescreen。从中得之,是需要来显示的,而且是最顶层的。这个类能出现在2个地方:

1. 指向它的时候,也就是调用addpreferencesfromresource的时候才被当做一个根(可以理解为布局的最外层),但是是没有显示的
2.出现在preference层次机构内部的时候, 那么它显示出来,并且是当被点击的时候会显示一个对话框形式的preference 或者直接启动一个intent。并且它里面的内容不会被显示 很点难理解,后面有试验代码的。官方有一个布局实例

    
    
        
        ... other preferences here ...
    
 

现在看看这个api:
1. public  ()  返回一个能被加到preferenceactivity上显示的adapter
这个adapter的getitem会返回的子类 , 这个preferencescreen不会出现在在adapter中,而是出现在这个pre
preferencescreen的上面     不好理解呀
2.public void ( listview)  把一个listview跟加进来,是使得listview 跟() 绑定,并且可以点击listview的item
3.public void ( dialog)  ,前面有说过“出现在preference层次机构内部的时候, 那么它显示出来,并且是当被点击的时候会显示一个对话框形式的preference”  ,那么这个回调就是当那个dialog 消失的时候调用的。
4.public ()  得到对话框  
5.public void ( parent, view,int position,long id)  当item被点击的时候的回调
 
基本介绍已结束,现在看一下代码:
1.理解
  
  
  
指向它的时候,也就是调用addpreferencesfromresource的时候才被当做一个根(可以理解为布局的最外层),但是是没有显示的
出现在preference层次机构内部的时候, 那么它显示出来,并且是当被点击的时候会显示一个对话框形式的preference 或者直接启动一个intent。并且它里面的内容不会被显示
对于上面的,我们更改xml
上面说顶层preferencescreen 是不会显示的,那么我就把它加上title等信息,
在在内部创建一个preferencescreen 点击看其反应:
xml如下:


    
    
    
    
        
        
        
        
        
        
        
    
    
     
    
结果截图:
preference的使用(2) --- preferencecategory && preferencescreen[亲测有效]

然后在点击一个结果是:

preference的使用(2) --- preferencecategory && preferencescreen[亲测有效]

由此可见,顶层的title跟 summary是没有显示的,  内部的preferencescreen是不会显示里面的子的preference,点击才会显示出来。上面还说或者是启动一个intent 那么就setintent ,并把preferencescreen加上key ”preference screen0

preferencescreen = (preferencescreen) findpreference("preference screen0");
		if (null != preferencescreen){
			preferencescreen.setintent(intenttest);
		}
结果是直接启动了intent ,没有弹出对话框,如果intent不存在的话,点击也是不会弹出对话框,而且会报错的

如果intent 如果不存在的话怎么来 catch呢?代码如下:

preferencescreen.setonpreferenceclicklistener(new onpreferenceclicklistener() {
			
			@override
			public boolean onpreferenceclick(preference preference) {
				log.i(tag , "preferencescreen is clicked ");
				intent intent = preferencescreen.getintent();
				if (null != intent){
					try {
						startactivity(intent);
					} catch (exception e) {
					}
					return true;
				}
				return false;
			}
		});
思路:如果存在intent的话,那么自己启动,并且return  true(事件不被传递了 ,如果intent错误也就被 catch了)

 public  ()
在xml中在增加一个preferencescreen 把screen0 中的都加入都 screen1 中
preferencescreen = (preferencescreen) findpreference("preference screen 0");
		preferencescreen1 = (preferencescreen) findpreference("preference screen 1");
		if (null != preferencescreen){
			adapter = preferencescreen.getrootadapter();
			int count = adapter.getcount();
			log.i(tag , "count = "   count    "is preference"   (adapter.getitem(0) instanceof preference));
			
			if (null != preferencescreen1){
				for (int i = 0 ; i < count ; i  ){
					preferencescreen1.addpreference((preference) adapter.getitem(i));
				}
			}
			
			
		}
xml:


    
    
    
    
        
        
        
        
        
        
        
         
        
        
    
    
    
    
    
     
    
结果:preference的使用(2) --- preferencecategory && preferencescreen[亲测有效]
 

preference的使用(2) --- preferencecategory && preferencescreen[亲测有效]

都加入进来了,但是排列刚刚相反?  这是为什么呢?

原来是 不每一个都设置了order,并且order的值都是2

为了研究这个问题,把xml改一下 ,如下:


        
        
        
        
        
        
        
         
        
        
    
    
    
    

都不加order的话那么显示结果都是  3 4 5 ,都是采用默认的排序,谁写在前面就排在前面

而当设置了order  并且都相同的时候,那么就根order来排序了

在代码中加入打印调试:

if (null != preferencescreen1){
				for (int i = 0 ; i < count ; i  ){
					log.i(tag , "key "   ((preference) adapter.getitem(i)).getkey());
					preferencescreen1.addpreference((preference) adapter.getitem(i));
				}
			}
打印结果是  " 5   4  3"	
然后在preferencescreen1 在add的时候 是前插的  也就变成了 3  4  5
preferencescreen0 add的时候 也就是 3 4 5  的顺序,被前插也就成了 5 4 3 


js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/128429.html

(0)

相关推荐

  • mongodb 使用场景[通俗易懂]1.mongodb介绍mongodb(名称来自”humongous”)是一个可扩展的高性能,开源,模式自由,面向文档的数据库。它使用c 编写。mongodb特点:a.面向集合的存储:适合存储对象及json形式的数据。b.动态查询:mongo支持丰富的查询表达方式,查询指令使用json形式的标记,可轻易查询文档中的内嵌的对象及数组。c.完整的索引支持:包括文档内嵌对象及数组。mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。d.查询监视:mon…

  • csgo国内开箱网站大全incsgo skinsdog狗网 coolkaixiang 88steamcsgo国内开箱网站大全收录incsgo金沙1005官网,skinsdog狗网金沙1005官网,coolkaixiang金沙1005官网,88steam金沙1005官网,box818金沙1005官网,piggycase金沙1005官网,yskins金沙1005官网incsgo国内csgo饰品皮肤开箱网站官方链接:www.incsgo.gg注册登录自动免费获得$1.00美金取回状态:直接取回**优惠码:**csgogo(充值使用csgogo可增加5%充值金额)skinsdog狗网csgo饰品皮肤开箱网站可直接取回官方链接:skinsdog.c.

  • android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有google-playandroid原生系统真的那么好用吗?这种问题当然是否定的。原生android(指的是直接基于aosp构建的而非手机厂商出厂固件修改的第三方rom,但包括nexus/pixel或其它被google直接支持的手机的可能是闭源的出厂固件)对于适合的人而言是无可替代的,当前几乎无任何定制rom就与之相比。但是对于更多的中国用户而言,他们从一开始就使用的是定制系统,已经习惯了那一套逻辑和对系统的认知,所以定制系统是更好的选择(但您们最好祈祷一下手机厂商的rom不要越来越不要脸)。当然.

    2022年12月14日
  • go 使用线程池做请求限流[通俗易懂]业务需要,请求限流的另一种思路,可当作参考,若有不妥的地方,欢迎评论 …

  • go语言的环境配置与hello world[通俗易懂] 示例系统 windows 10 安装go语言开发工具 根据自己的喜好在以下两个链接中,选择其中一个来下载go语言开发工具,选择下载以.msi作为后缀名的windows版。 go语言中文网 go语言金沙1005官网(需要魔法上网) 检查go语言开发工具是否可用 在命令行中直接输入go命令,如果显示出如以下的提示, …

  • golang源码分析_stl源码剖析怎么样堆原理解析 堆一般指二叉堆。是使用完全二叉树这种数据结构构建的一种实际应用。通过它的特性,分为最大堆和最小堆两种。 如上图可知,最小堆就是在这颗二叉树中,任何一个节点的值比其所在子树的任意一个节点都要

  • mongodump 备份还原[通俗易懂]整库数据操作(备份为bson格式,更好)导出数据mongodump-h192.168.132.123:27017-ddbname-o~/tmp/导入数据mongorestore-hdbhost-ddbname–dirdbdirectory表级数据操作导出数据mongodump-h192.168.132.156:27017-ddbname-cuser-o~/tmp/导入数据mongorestore-uroot-pxxx-ddbname-

  • github源码网站:https://github.com/mikemintang/go-curl如何安装包gogetgithub.com/mikemintang/go-curl发送post请求:packagemainimport(“fmt””github.com/mikemintang/go-curl”)funcmain(){url:=”http://

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图