总的来说,这个TAB用起来还算方便吧
不过随着用的地方多起来,发现了一些问题,比如下面这个界面:
TAB1和TAB2都是表单,保存按钮对两个TAB都有效:若当前显示TAB1,点击保存则保存TAB1的form;若当前显示TAB2,点击保存则TAB2的form。现在的情况是,在每个TAB的fragment中都拿到这个保存的button,然后对其设置click事件,如此操作可能有这样的一个结果:打开这个界面,什么也不操作,直接点击保存,这个时候保存的是TAB2的form,而当前显示的却是TAB1。
这个问题困扰了很久,尝试了很多方法:
1、给TAB标签的onclick事件中加入调用fragment的onResume(),手动去调fragment的onResume方法,在fragment的onResume()中设置button的onclick事件。点击TAB即可改变button的监听器,但是对于直接进页面就点击保存按钮仍然无效;
2、给viewpage的滑动事件中添加调用fragment的onResume(),这个方法和方法1效果类似;
3、想:一般情况很少有人打开界面之后直接点击保存,都会做一些界面操作,比如,输入文本之类,所以想到给TAB1的fragment中设置一个OnTouchListener,这个只要用户对TAB1界面操作,在OnTouchListener中捕捉到,然后对button设置click,这样就OK了。即使用户进入界面,什么不操作直接点击保存,也不会出现保存错误的问题。
虽然想要的效果实现了,但是心里感觉还是很不爽,总感觉有个疙瘩。今天无意中看到一篇博文:“Fragment真正意义上的onResume和onPause:Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果”,拿过来一试,果然很爽。
在TAB的fragment中重写它的setUserVisibleHint(),如下:
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ activity.findViewById(R.id.bt_title_Right).setOnClickListener(this); } }
很好的结果了这个问题,在此感谢:农民伯伯。
参考:http://www.cnblogs.com/over140/p/3392164.html
问题1:地图载入不出来
这个问题很可能是你目前版本高于2.0.2,但是用的秘钥还是2.0.1以前的,所以重新申请秘钥。
注意:为了给用户提供更优质的服务,iOS SDK自v2.0.2版本开始采用了全新的Key验证体系。因此,当您选择使用v2.0.2及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请,申请及配置流程请参考开发指南对应章节。(选择使用v2.0.1及之前版本SDK的开发者,申请密钥(Key)的方式不变)。
问题2:[[BMKMapManager alloc]init] crash在Other Linker Flags中加入 -all_load,
如果不行把Other Linker Flags 下的 Debug 、Release 和其中相应的Any ios Simulator sdk、Any ios sdk 中全部加上 -all_load
Re: MyGameZone1小时前回复u012607740n.......................0x01 昨天写了反编译,今天就写下签名的问题
0x02 apktool的重打包功能大家都知道,堪称神器,各类破解人事必备之良器,
用法不多说,只说签名容易遇到的问题
0x03 创建私钥仓库这个事情就不多说,方法很多,eclipse和keytool 都有类似功能
需要注意的是,这个私钥仓库一共有两个密码,一个是私钥仓库的密码(storepass),另一个则是仓库里面每一个私钥对应一个密码(keypass),都是需要记住的。一个私钥仓库可以有多个私钥。
换句话说每个私钥仓库创建的时候,这几个参数是要记录的
-storepass 123456789 私钥仓库的密码
-keypass 1987XXXX 私钥的密码
-keystore F:\\webattack\android\AndroidMasterKey_icefish.key 私钥仓库文件在哪
icefish 私钥的名称
0x04 下来就是签名的东西了,jarsigner
用法 jarsigner -help可以看到。
这里面比较关键的几个参数
-storepass -keypass -keystore 上面的都说了,
-verbose 输出详细信息
特别注意的是 -signedjar 这个参数,他一共有三个选项,第一个是签名后的apk文件名,第二个选项是需要签名的apk路径,第三个很关键,就是前面提到的私钥的名称了。
一个常见的如下所示
jarsigner -verbose -keystore F:\\webattack\android\AndroidMaster Key_icefish.key -storepass 123456789 -keypass 1987XXXX -signedjar Modify_signed. apk F:\\webattack\android\result\ModifyCompile\Modify.apk icefish
0x05 在实际使用中,我们成功打包,成功签名,然后Android机子上一装,报错:
10-14 07:06:50.223: W/PackageParser(61): java.lang.SecurityException: META-INF/ICEFISH_.SF has invalid digest for res/menu/main.xml in /data/app/vmdl-2089432299.tmp
甚至没有改动任何代码的直接签名都报这个错。
原因如下:
http://hardpass.iteye.com/blog/1534636
实质就是jdk7改变了jarsigner的默认选项,不再是SHA 128了,而是变成了SHA256,
这样Android 模拟器就验证不对了
解决办法就是再jarsigner的调用中在强制设置摘要算法
-digestalg SHA1 -sigalg MD5withRSA
这样就可以了。