Android笔记

1.布局文件中ImageView有警告时为它加上contentDescription项


2.继承Adapter的GetView函数的正确用法:使用ViewHolder来控制之前已经产生了的ChildView(converView),如果converView存在则直接取得存放在tag中的ViewHolder来设置需要改变的项.

        public View getView(int position, View convertView, ViewGroup parent) {
        	ViewHolder holder;
        	FileData fd = items.get(position);
        	
        	if(convertView==null) {  
                holder = new ViewHolder();
                holder.icon = new ImageView(FileSelectAcitvity.this);
                holder.text = new TextView(FileSelectAcitvity.this);
                holder.text.setTextColor(0xFFFFFFFF);
                
                LinearLayout ll = new LinearLayout(FileSelectAcitvity.this);
        		ll.setOrientation(LinearLayout.HORIZONTAL);
        		ll.setVerticalGravity(Gravity.CENTER);

        		ll.addView(holder.icon);
        		ll.addView(holder.text);
        		ll.setTag(holder);
        		convertView = ll;
        		
            }else {
                holder = (ViewHolder) convertView.getTag();  
            }
        	
            holder.text.setText(fd.name);
            if(fd.type==0)
            	holder.icon.setImageResource(R.drawable.folder);
            else if(fd.type==1)
            	holder.icon.setImageResource(R.drawable.default2);
            else
            	holder.icon.setImageResource(R.drawable.notes);
            return convertView;
        }
        
        public final class ViewHolder {  
        	public ImageView icon;
            public TextView text;
        }

这样写的原因是因为这样能产生最少的view,每次只产生能看见的view的数量.并且能够防止内存泄露.


3.handler的postDelayed方法只是伪多线程异步处理,真正的多线程用Thread类来实现

Thread th_convert_word = new Thread(new Runnable(){
		@Override
		public void run() {
			int length = doc.characterLength();
			for (int i = 0; i < length-1; i+=range_size) {
				int end = i + range_size;
				if(i+range_size>length-1)
					end = length-1;
				
				Range r = new Range(i, end, doc);
				try {
					doc2html(file_md5,doc,r,i/range_size);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	});
	th_convert_word.start();


4.poi下WordToHtmlConverter的processDocument在安卓下报错,下载poi的源码跟踪调试后发现在下面出错:

//package org.apache.poi.hwpf.converter
//AbstractWordUtils.java

    static void compactChildNodesR( Element parentElement, String childTagName )
    {
        NodeList childNodes = parentElement.getChildNodes();
        for ( int i = 0; i < childNodes.getLength() - 1; i++ )
        {
            Node child1 = childNodes.item( i );
            Node child2 = childNodes.item( i + 1 );
            if ( !WordToFoUtils.canBeMerged( child1, child2, childTagName ) )
                continue;

            // merge
            while ( child2.getChildNodes().getLength() > 0 )
                child1.appendChild( child2.getFirstChild() );
            child2.getParentNode().removeChild( child2 );
            //i--;
        }

        childNodes = parentElement.getChildNodes();
        for ( int i = 0; i < childNodes.getLength() - 1; i++ )
        {
            Node child = childNodes.item( i );
            if ( child instanceof Element )
            {
                compactChildNodesR( (Element) child, childTagName );
            }
        }
    }

出错在removeChild这句,child2已经没有item继续调用该句的话就会出错,注释掉i--重新编译就没有报错了,怀疑是代码bug?

5.链式调用,诸如以下好玩的东西

        public class Test{
        	int integer;
        	public Test t1(){
        		integer +=1;
        		return this;
        	}
        	public Test t2(){
        		integer -=1;
        		return this;
        	}
        }
        
        Test t = new Test();
        t.t1().t2();


6.多线程中:

永远不要用stop().

interrupt()是在有block method时用的,如sleep().

终结线程的唯一方法是让run()跑完.

中断线程最好的,最受推荐的方式是,使用共享变量(shared variable)发出信号,告诉线程必须停止正在运行的任务.线程必须周期性的核查这一变量(尤其在冗余操作期间),然后有秩序地中止任务.

 

7.用作互斥加锁的对象最好不要用来当标志

 

8.主线程handler的正确写法(用弱应用获得类的操作权)

 

	//主线程的消息队列处理器
	MyHandler main_thread_handler = new MyHandler(this);
	
	static class MyHandler extends Handler {
		WeakReference<MainActivity> mActivity;
		public MyHandler(MainActivity activity) {
			mActivity = new WeakReference<MainActivity>(activity);
		}
		@Override
		public void handleMessage(Message msg) {
			if(((String)msg.getData().get("msg")).equals("update")){
				MainActivity main = mActivity.get();
				
				String url="file:///sdcard/cloudshare/temp/" + main.file_md5 + "/doc" + msg.getData().getString("pager") + ".html";
				main.web_now.loadUrl(url);
			}
			super.handleMessage(msg);
		}
	}


1、
getView执行的次数和你的getCount没有直接的关系   ,getCount和你listView里面的条目数量(行数量)有关系 ,getView方法执行次数取决于你屏幕上显示几个条目,比如你有100行  ,但是你一屏只能显示5行,那么启动程序的时候 系统调用5次getView方法,当你把listView往下拉的时候会显示出其他未显示的行,这样系统就会调用getView方法,每显示一个新的行就调用一次getView,所以你要是不停的上下滑动listVew那getView理论上是可以调用任意次数的
2、
此问题在于,ListView没有取到实际的高度,无法确定取多少View来填充ListView,也就是运行getView()的具体运行次数。 
3、 应该把listiview在布局文件中的高度设置为:fill_parent


continue...

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Android笔记系统是一种可以帮助用户记录、整理和分享笔记的应用程序。以下是一些常见的Android笔记系统的特点和功能: 1. 笔记编辑:大多数Android笔记系统都提供了基本的文本编辑功能,用户可以输入、编辑和保存笔记。一些系统还允许用户插入图片、附件和链接等元素,以丰富笔记内容。 2. 分类和标签:许多Android笔记系统允许用户将笔记进行分类和标签,以便更好地组织和查找。这有助于用户根据主题、日期或其他标准将笔记分组,以便快速找到所需的资料。 3. 笔记共享:一些Android笔记系统允许用户将笔记分享到社交媒体平台或与其他人共享。用户可以选择将笔记以链接、邮件或其他形式发送给朋友或同事,以便他们能够方便地查看和评论笔记。 4. 搜索功能:许多Android笔记系统提供强大的搜索功能,用户可以根据关键词、标签或分类快速找到所需的笔记。 5. 提醒和日历集成:一些Android笔记系统与日历应用程序集成,允许用户设置提醒,以便在特定日期或时间提醒用户查看或更新笔记。 6. 云同步:大多数Android笔记系统都支持云同步功能,用户可以将笔记存储在云端,并在多个设备上访问。这有助于用户在不同设备之间同步笔记,并确保数据的安全性和可访问性。 7. 多平台支持:一些Android笔记系统还支持在多个平台上使用,包括iOS、Windows和Mac等。这为用户提供了更多的灵活性和选择。 总之,Android笔记系统为用户提供了一个方便、高效的方式来记录、整理和分享笔记。它们提供了各种功能和工具,以帮助用户更好地组织和查找信息,并与其他人共享和协作。选择一个适合自己的Android笔记系统,可以帮助您更有效地管理您的学习、工作或个人笔记

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值