2015年4月30日星期四

监听控件位置发生变化

View.getViewTreeObserver().addOnGlobalLayoutListener

ExpandableListView 的用法总结

1. 如果想修改 group标签可以以下设置
@Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            ....
            if (isExpanded){
                groupHolder.iconImageView.setImageResource(R.drawable.alim_create_input_icon_1);
            }else{
                groupHolder.iconImageView.setImageResource(R.drawable.alim_create_input_icon_2);
            }
            return convertView;
        }

要对 还要对 ExpandableListView的标签图标设置空
mStudentExpandableListView.setGroupIndicator(null);

2015年4月20日星期一

property nonatomic与atomic(无原子与原子)

为了防止同一变量被不同的线程在某一时间段同时访问,必须加原子琐来保证某次操作的正确性。关于操作的原子性,我看过大神guancheng的一篇http://www.parallellabs.com/2011/04/09/pthread-mutex-lock-and-thread-safety/,这篇文简单的介绍下原子操作。
       给线程加锁的消耗是比较大的,而我们在IOS中不是经常会多个线程访问一个同一个变量,为了提高效率,我们通常会在属性中这样声明:
@property (nonatomic,copy)NSString *userName;
     有同学可能非常疑惑,这样做到底能提高多少效率呢?不这样做又怎样?好,下面我们来写个Demo。
1.首先我使用上面的声明的userName的声明
[html] view plaincopy
  1. @property (nonatomic,copy)NSString *userName;  
  2. - (void)viewDidLoad  
  3. {  
  4.     uint64_t begin =  mach_absolute_time();  
  5.     self.userName = @"username";  
  6.     uint64_t end   = mach_absolute_time();  
  7.     NSLog(@"end - begin = %llu",end-begin);  
  8. }  
运行下结果是:
2012-07-12 19:57:59.679 NavigationDemo[635:f803] end - begin= 1236
2.然后我使用下面的声明
[html] view plaincopy
  1. @property (atomic,copy)NSString *userName;  
  2. - (void)viewDidLoad  
  3. {  
  4.     uint64_t begin =  mach_absolute_time();  
  5.     self.userName = @"username";  
  6.     uint64_t end   = mach_absolute_time();  
  7.     NSLog(@"end - begin = %llu",end-begin);  
  8. }  
运行的结果是:
NavigationDemo[726:f803] end - begin = 8330
3.可以明显看出声明为nonatomic能提高好几倍的效率,所以在属性声明的时候,当不会在多线程下操作此成员的时候声明为非原子性能极大的提高效率,希望看完这篇文后更多的同学能使用这个声明。

Xcode快捷键使用

1.编辑
CMD + [: 左缩进
CMD + ]: 右缩进


2. 调试
CMD + R: 编译并运行(不触发断点)
CMD + Y: 编译并调试(触发断点)

CMD + OPT + B: 查看全部断点
CMD + B: 编译
CMD + SHIFT + K: 清理


3.常用
CMD+Z:返回上一个操作(control+z)


方法参数的 命名方式

有时候方法名里也会设置位 参数名,看看以下方法.

在方法Caculation中为 对二个参数设置名为 CurStatusCode了. 在看看方法使用方法。


使用cube 实现异步下载图片

首先需要加载cube包
他的项目地址在 http://cube-sdk.liaohuqiu.net/

主要讲解代码
ImageLoader mImageLoader=ImageLoaderFactory.create(this);
hovderView.titleImage.loadImage(mImageLoader,imgurl);

在这里 hoverView.titleImage是cube的自定义图片视图,如下

<in.srain.cube.image.CubeImageView
                android:id="@+id/title_imageview"
                android:layout_width="fill_parent"
                android:layout_height="@dimen/dp150"
                android:layout_centerInParent="true"/>

2015年4月17日星期五

webview的WebViewClient 网址重组重新加载的问题

有时候我们需要 在webview内部下 跳转网址时候加一些内容重新跳转.
这时候 我们就需要用到 webviewclient
shouldOverrideUrlLoading可以帮助我们解决这个问题。这个是当webview内部发生变化的时候
进入的方法。
直接贴代码

@Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            String urlParams="ENCRYPT="+DoContent.UserInfo.excrypted+"&osType=Android";
            if (url.indexOf("?")>=0 && url.indexOf(urlParams)<0){
                url += "&"+urlParams;
                view.loadUrl(url);
                return false;
            }else if(url.indexOf("?")<0 && url.indexOf(urlParams)<0){
                url += "?ENCRYPT="+ DoContent.UserInfo.excrypted+"&osType=Android";
                view.loadUrl(url);
                return false;
            }
            return super.shouldOverrideUrlLoading(view, url);
        }