﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Codejie's C++ Space-随笔分类-G7</title><link>http://www.cppblog.com/codejie/category/15382.html</link><description>Using C++</description><language>zh-cn</language><lastBuildDate>Thu, 19 Jun 2014 12:18:47 GMT</lastBuildDate><pubDate>Thu, 19 Jun 2014 12:18:47 GMT</pubDate><ttl>60</ttl><item><title>Android DEV : Show a window on Baidu Map</title><link>http://www.cppblog.com/codejie/archive/2014/06/18/207328.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 18 Jun 2014 12:22:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2014/06/18/207328.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/207328.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2014/06/18/207328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/207328.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/207328.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 周末同学说想弄个基于Baidu地图的应用, 于是就开始研究这个SDK来. 其中应用有个需求, 需要点击地图上的标记时, 显示一组按钮. 于是按照常规的作法失业了InfoWindow, 如下.</p> <div> <div><pre>    <span style="color: #008000">//panel is a view, some buttons in it.</span>
    <span style="color: #0000ff">final</span> InfoWindow iw = <span style="color: #0000ff">new</span> InfoWindow(panel, marker.getPosition(), <span style="color: #0000ff">null</span>);
    <span style="color: #008000">//getMap() return BaiduMap</span>
    activity.getMap().showInfoWindow(iw);</pre></div>
<div>&nbsp;</div></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 倒是不难, 但处理点击事件时发现有问题了. 根据文档, 此时显示出来的InfoWindow实际是View的Bitmap图片, 也就意味着根本没法区分View上的Buttons了, 更别说能处理Button的点击事件了. 怪不得, 文档中对于整个InfoWindow只有一个ClickListener, 还不含有View信息.</p>
<p>&nbsp;&nbsp;&nbsp; 这样只能"曲线救国"了, InfoWindow不能用, 那就直接在MapView中弹出个PopupWindow吧. (顺手敲打测试代码, 就记录用)</p>
<p>&nbsp;</p>
<p>
</p><div><pre>    <span style="color: #0000ff">final</span> View panel = UserPanel.make(activity);
    Point p = activity.getMap().getProjection().toScreenLocation(marker.getPosition());

    <span style="color: #0000ff">final</span> PopupWindow pw = <span style="color: #0000ff">new</span> PopupWindow(panel);
    pw.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
    pw.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    pw.setFocusable(<span style="color: #0000ff">true</span>);
    pw.setOutsideTouchable(<span style="color: #0000ff">true</span>);
    <span style="color: #008000">//getMapView() return MapView, not BaiduMap any more</span>
    pw.showAtLocation(activity.getMapView(), Gravity.LEFT | Gravity.BOTTOM,p.x, p.y );

    <span style="color: #0000ff">final</span> Button btn = (Button) panel.findViewById(R.id.button2);
    btn.setOnClickListener(<span style="color: #0000ff">new</span> View.OnClickListener() {
        @Override
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> onClick(View view) {
            pw.dismiss();
        }
    });</pre></div><br />
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 搞定,人长个脑袋总是有用的... </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 测试中发现个问题, 如果地图发生放缩, Window弹出的位置会不准确, 很是奇怪, 按理MapView发生变化时, 其Projection应该能够实时跟随变化的, 这个问题回头需要再看看.<br /><br />&nbsp; &nbsp; &lt;---- 回过头的分割线 ----&gt;<br />&nbsp; &nbsp; 位置不准确的问题是由于View和Screen坐标系不同, 以及MapView自身size共同影响的, 错怪了Projection了..</p><img src ="http://www.cppblog.com/codejie/aggbug/207328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2014-06-18 20:22 <a href="http://www.cppblog.com/codejie/archive/2014/06/18/207328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android DEV : setOnClickListener() vs. android:onClick</title><link>http://www.cppblog.com/codejie/archive/2014/06/06/207213.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Fri, 06 Jun 2014 13:40:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2014/06/06/207213.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/207213.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2014/06/06/207213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/207213.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/207213.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 晚上查看一段资源xml文件时, 发现View竟然有个'android:onClick'属性...这太'震惊'了...</p> <p>&nbsp;&nbsp;&nbsp; 刚开始敲Android时, 就想过这个问题 -- android把资源文件用的如此灵活, 为啥View控件不能在资源文件中直接定义各类事件回调函数呢? 后来敲多了, 发现如果直接在资源文件中定义事件处理属性, 这会限制资源文件的使用, 像是同一份资源文件如果被两个不同的Activity使用, 那就必须各自写一个事件回调处理函数, 如果没有, 一旦事件被触发, 那就是异常啊; 另外, 如果资源文件被一个Fragment使用, 且在Fragment实现了事件处理函数, 那当Fragment加入到Activity后, 怕系统就找不到这个函数了. 因此, 觉得没有'android:onClick'这样的属性该是正常的, 后面也就没再想过这个了, 每次都很老实的使用View.setOnClickListener()了...</p> <p>&nbsp;&nbsp;&nbsp; 但, 现在这个属性竟然真是存在, 而且一直都在, 这太让我'崩溃'了...那感觉就像走在大街上, 突然看到有人在遛 --- 恐龙一样...</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 于是, 赶紧写了代码测试了下~</p> <div><pre>    &lt;Button
        android:id="<span style="color: #8b0000">@+id/button1</span>"
        android:layout_width="<span style="color: #8b0000">wrap_content</span>"
        android:layout_height="<span style="color: #8b0000">wrap_content</span>"
        android:onClick="<span style="color: #8b0000">onButtonClick</span>"
        android:text="<span style="color: #8b0000">Button</span>" /&gt;</pre></div>
<div>&nbsp;</div>
<div><pre>	public void onButtonClick(View view) {
		Log.d(Tag, "onButtonClick()");		
	}</pre></div><br>
<p>&nbsp;&nbsp;&nbsp; 果然好用...但突然想到, 如果这个跟View.setOnClickListener()共存时, 调用过程该是如何呢? </p>
<p>&nbsp;</p>
<div><pre>		Button btn = (Button) <span style="color: #0000ff">this</span>.findViewById(R.id.button1);
		btn.setOnClickListener(<span style="color: #0000ff">new</span> OnClickListener() {

			@Override
			<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> onClick(View v) {
				Log.d(Tag, "<span style="color: #8b0000">onClickListener - onClick()</span>");
			}
			
		});</pre></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 测试结果是,OnClilckListener()中的onClick()会被调用, 而android:onClick定义的onButtonClick()完全被忽略了. <br></p>
<p>&nbsp;&nbsp;&nbsp; 就如前面提到的, 这种属性设置的方式有些缺陷, 还是使用setOnClickListener()比较可控靠谱, 当然如果在布局文件使用比较固定的情况下, 这种属性定义方式确实可以少敲很多代码.</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 基于测试结果, 突然'抖机灵'地想到一段代码来 -- 如果在onButtonClick()中调用setOnClickListener()会怎样呢?</p>
<p>&nbsp;</p>
<div><pre>	<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> onButtonClick(View view) {
		Log.d(Tag, "<span style="color: #8b0000">onButtonClick()</span>");
		
		Button btn = (Button) <span style="color: #0000ff">this</span>.findViewById(R.id.button1);
		btn.setOnClickListener(<span style="color: #0000ff">new</span> OnClickListener() {

			@Override
			<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> onClick(View v) {
				Log.d(Tag, "<span style="color: #8b0000">onClickListener - onClick()</span>");
			}
			
		});		
	}</pre></div>
<p><br>&nbsp;&nbsp;&nbsp; 这样第一次点击时, 执行onButtonCllick(), 并将View的点击事件处理通过setOnClickListener()传到OnClickListener()中, 当再次被点击时, 就会执行onClick()了. 这就可以实现一种需求 -- 点一次没事, 再点就崩溃...根本不用加什么判断变量和语句了, 嘿嘿, 多'机智'啊...</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&lt;---- 拖延症也会并发的分割线 ----&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 近段时间, 各种借口导致各种拖延症并发, 使得SnakeGo敲的甚是缓慢..不表了...</p><img src ="http://www.cppblog.com/codejie/aggbug/207213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2014-06-06 21:40 <a href="http://www.cppblog.com/codejie/archive/2014/06/06/207213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>I;P : Evolution of Icon</title><link>http://www.cppblog.com/codejie/archive/2014/05/05/206820.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sun, 04 May 2014 16:15:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2014/05/05/206820.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/206820.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2014/05/05/206820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/206820.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/206820.html</trackback:ping><description><![CDATA[<p style="white-space: normal; text-transform: none; word-spacing: 0px; color: rgb(0,0,0); font: 13px/19px verdana, geneva, arial, helvetica, sans-serif; margin: 10px 0px; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><strong>快捷链接</strong></p> <p style="white-space: normal; text-transform: none; word-spacing: 0px; color: rgb(0,0,0); font: 13px/19px verdana, geneva, arial, helvetica, sans-serif; margin: 10px 0px; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp; <span class="Apple-converted-space">&nbsp;</span><a style="color: rgb(0,102,170); text-decoration: none" href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载地址</a></p> <p style="white-space: normal; text-transform: none; word-spacing: 0px; color: rgb(0,0,0); font: 13px/19px verdana, geneva, arial, helvetica, sans-serif; margin: 10px 0px; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp; <span class="Apple-converted-space">&nbsp;</span><a style="color: rgb(0,102,170); text-decoration: none" href="http://www.cppblog.com/codejie/category/20828.html">相关随笔</a></p> <p style="white-space: normal; text-transform: none; word-spacing: 0px; color: rgb(0,0,0); font: 13px/19px verdana, geneva, arial, helvetica, sans-serif; margin: 10px 0px; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p> <p><strong>正文</strong></p> <p><strong></strong>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 这几天除了更新I;P的Preview版, 还一直忙于敲I;P的最终Release版本代码, 初见成效, 已经可以正常加载和使用Preview的数据了.</p> <p>&nbsp;&nbsp;&nbsp; 为何要强调这个数据呢? 因为Release版本的数据库是需要"加密"的, 不然随便一改, 那排行榜就乱套了呀..说到"加密"问题, 就再多说两句 -- I;P在设计初期, 为了保持跨平台的特性(实际我多数时间是在PC上玩I;P的), PC上使用的是JDBC, Android平台上使用了同样的JDBC跨平台库 -- <a href="https://github.com/SQLDroid/SQLDroid">sqldroid</a>库. 这样在代码上就可以保持平台间无差异. 但这个库是不支持sqlite"加密"的, Rlease版本为了加密引入了<a href="http://sqlcipher.net/">sqlcipher</a>库. 这就来麻烦了, 因为sqlcipher库只支持Android平台, 且使用的是跟JDBC风格不一致的Android SDK中的SQLite访问接口. 最终为了保持I;P的跨平台, 加密, 以及数据接口访问一致的需求, 花了整整一个晚上在原有的跨平台支持的"适配层"中又不得不添加了DBConnection和DBResultSet两个组件; 前者用于封装JDBC和sqlcipher的不同的SQLite访问接口, 后者则是为了封装不同接口的查询结果数据集. 好在前期的"适配层"设计还算灵活, 添加的代码甚少, 且一次调试通过, 甚是开心...由于Release版本代码涉及"加密", 源码也就不能开源了, 今天这里就描述下这个问题和解决方法, 回头再开帖细聊这个"适配层"是什么样子的吧.</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 今晚主要想show的是I;P的Release版本使用的图标. </p> <p>&nbsp;&nbsp;&nbsp; 做图我是外行, 弄个设计更是无脑了, 所以才有了I;P现在亮瞎眼的图标.</p> <p><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/ip_2.png"><img title="ip" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ip" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/ip_thumb.png" width="244" height="244"></a></p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 一直看着这个图标不爽, 好在I;P群中高手多(再次感谢各位), 在高手的协助和指点下, Release版本有了新图标了, 不管好不好看, 不管会不会用上, 也不管会不会再被I;P群里喷, 我先贴出图标的演进过程, 用以奖赏今晚的努力~</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_5_2.png"><img title="icon_new_5" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="icon_new_5" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_5_thumb.png" width="244" height="244"></a><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_3_2.png"><img title="icon_new_3" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="icon_new_3" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_3_thumb.png" width="244" height="244"></a><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_1_2.png"><img title="icon_new_1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="icon_new_1" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_1_thumb.png" width="244" height="244"></a><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_4_2.png"><img title="icon_new_4" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="icon_new_4" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/icon_new_4_thumb.png" width="244" height="244"></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 图标背景该是透明的, 真实样子如下图.</p> <p>&nbsp;</p> <p><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/new_icon_6_2.jpg"><img title="new_icon_6" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="new_icon_6" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/956484e5c060_14A8B/new_icon_6_thumb.jpg" width="244" height="404"></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&lt;---- 自卖自夸的分割线----&gt;</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; I;P的Release版本在功能上跟Preview版本没有多少差别, 但上线后, Preview虽会保留的, 但其中的多数关卡都将被清除并转移到Release版本中, 所以啊..赶紧<a href="https://play.google.com/store/apps/details?id=jie.android.ip.preview">下载</a>吧...嘿嘿...</p><img src ="http://www.cppblog.com/codejie/aggbug/206820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2014-05-05 00:15 <a href="http://www.cppblog.com/codejie/archive/2014/05/05/206820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LIBGDX: FreeTypeFontGenerator and BitmapTrueFont</title><link>http://www.cppblog.com/codejie/archive/2014/03/09/206115.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sun, 09 Mar 2014 13:03:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2014/03/09/206115.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/206115.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2014/03/09/206115.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/206115.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/206115.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 在刚开始敲<a href="http://www.cppblog.com/codejie/archive/2014/03/07/206085.html">I;P游戏</a>的时候, 字体使用的是BitmapFont, 只要有一套字体的PNG文件就可以显示字体数据了. 并且通过BitmapFont对象可以很好的跟Label结合在一起使用. BitmapFont中的字体从PNG文件中截取出来有很多方便的地方, 比如, 一来只需要准备使用的字符即可, 这样字体文件比较小; 二来可以定义任意的图案来代替字符, 灵活性定制方便. 但反过来, 由于基于PNG文件, 也导致了BitmapFont有个两个主要的缺陷 -- </p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 标量字体, 放大会失真;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 字符集有限, 尤其是使用中文时, 改动几率大;</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 好在LIBGDX还在其扩展库(gdx-freetype)中提供了另外一个好用的对象 --- FreeTypeFontGenerator. 通过这个对象可以加载TTF (TrueType Font), 然后产生BitmapFont对象就可以使用了.</p> <p>&nbsp;&nbsp;&nbsp; 下面是FreeTypeFontGenerator对象的主要函数原型.</p> <blockquote> <div><pre><span style="color: #008000">/** Generates a new {@link BitmapFont}, containing glyphs for the given characters. The size is expressed in pixels. Throws a
 * GdxRuntimeException in case the font could not be generated. Using big sizes might cause such an exception. All characters
 * need to fit onto a single texture.
 * @param size the size in pixels
 * @param characters the characters the font should contain
 * @param flip whether to flip the font horizontally, see {@link BitmapFont#BitmapFont(FileHandle, TextureRegion, boolean)} */</span>
<span style="color: #0000ff">public</span> BitmapFont generateFont (<span style="color: #0000ff">int</span> size, String characters, boolean flip) {}
<span style="color: #008000"></span></pre><pre><span style="color: #008000">/** Generates a new {@link BitmapFont}. The size is expressed in pixels. Throws a GdxRuntimeException in case the font could not
 * be generated. Using big sizes might cause such an exception. All characters need to fit onto a single texture.
 * 
 * @param size the size of the font in pixels */</span>
<span style="color: #0000ff">public</span> BitmapFont generateFont (<span style="color: #0000ff">int</span> size) {}</pre></div></blockquote>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 在LIBGDX中, AssetManager是个很实用的对象, 通过它可以在游戏初始时就将资源加载或者初始化好, 使用时只需要传递资源名称即可获取相关资源. 比如, 下面代码加载了TextureAtlas和Sound的资源.</p>
<blockquote>
<div><pre>assetManager.load(PackConfig.SCREEN_PLAY, TextureAtlas.<span style="color: #0000ff">class</span>);
assetManager.load(PackConfig.SCREEN_MENU, TextureAtlas.<span style="color: #0000ff">class</span>);

assetManager.load(AudioConfig.MENU_CLICK, Sound.<span style="color: #0000ff">class</span>);
assetManager.load(AudioConfig.TRAY_CATCH, Sound.<span style="color: #0000ff">class</span>);</pre></div></blockquote><br>
<p>&nbsp;&nbsp;&nbsp; 字体也是一种资源, 因此也可以通过AssetManager来加载TTF字体. 为了能使得两者无缝链接, 可以模仿BitmapFont对象创建个BitmapTrueFont来实现.</p>
<p>&nbsp;</p>
<blockquote>
<div><pre><span style="color: #0000ff">package</span> jie.android.ip.common.ttf;

<span style="color: #0000ff">import</span> java.util.HashMap;

<span style="color: #0000ff">import</span> com.badlogic.gdx.assets.AssetLoaderParameters;
<span style="color: #0000ff">import</span> com.badlogic.gdx.graphics.g2d.BitmapFont;
<span style="color: #0000ff">import</span> com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
<span style="color: #0000ff">import</span> com.badlogic.gdx.utils.Disposable;

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> BitmapTrueFont <span style="color: #0000ff">implements</span> Disposable {

	<span style="color: #0000ff">private</span> <span style="color: #0000ff">final</span> HashMap&lt;Integer, BitmapFont&gt; fontMap = <span style="color: #0000ff">new</span> HashMap&lt;Integer, BitmapFont&gt;();
	
	<span style="color: #0000ff">private</span> <span style="color: #0000ff">final</span> FreeTypeFontGenerator generator;
	<span style="color: #0000ff">private</span> <span style="color: #0000ff">final</span> String chars;
	
	<span style="color: #0000ff">public</span> BitmapTrueFont(<span style="color: #0000ff">final</span> FreeTypeFontGenerator generator, <span style="color: #0000ff">final</span> BitmapTrueFontParameter parameter) {
		<span style="color: #0000ff">this</span>.generator = generator;
		<span style="color: #0000ff">this</span>.chars = parameter.getChars();
	}
	
	@Override
	<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> dispose() {
		<span style="color: #0000ff">for</span> (<span style="color: #0000ff">final</span> BitmapFont font : fontMap.values()) {
			<span style="color: #0000ff">if</span> (font != <span style="color: #0000ff">null</span>) {
				font.dispose();
			}
		}

		<span style="color: #0000ff">if</span> (generator != <span style="color: #0000ff">null</span>) {
			generator.dispose();
		}
	}
	
	<span style="color: #0000ff">public</span> <span style="color: #0000ff">final</span> BitmapFont getBitmapFont(<span style="color: #0000ff">int</span> size) {
		<span style="color: #0000ff">if</span> (generator == <span style="color: #0000ff">null</span>) {
			<span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>;
		}
		
		BitmapFont font = fontMap.get(Integer.valueOf(size));
		<span style="color: #0000ff">if</span> (font == <span style="color: #0000ff">null</span>) {
			<span style="color: #0000ff">if</span> (chars == <span style="color: #0000ff">null</span>) {
				font = generator.generateFont(size);
			} <span style="color: #0000ff">else</span> {
				font = generator.generateFont(size, chars, <span style="color: #0000ff">false</span>);
			}
			fontMap.put(Integer.valueOf(size), font);
		}
		<span style="color: #0000ff">return</span> font;
	}
	
	<span style="color: #0000ff">static</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> BitmapTrueFontParameter <span style="color: #0000ff">extends</span> AssetLoaderParameters&lt;BitmapTrueFont&gt; {
		<span style="color: #0000ff">private</span> String chars = <span style="color: #0000ff">null</span>;
		
		<span style="color: #0000ff">public</span> BitmapTrueFontParameter() {			
		}
		
		<span style="color: #0000ff">public</span> BitmapTrueFontParameter(<span style="color: #0000ff">final</span> String chars) {
			<span style="color: #0000ff">this</span>.chars = chars;
		}
		
		<span style="color: #0000ff">public</span> <span style="color: #0000ff">final</span> String getChars() {
			<span style="color: #0000ff">return</span> chars;
		}
	}	
}</pre></div></blockquote><br>
<p>&nbsp;&nbsp;&nbsp; OK, 现在可以使用下面代码加载TTF资源了.</p>
<blockquote>
<div><pre>assetManager.load("example.ttf", BitmapTrueFont.<span style="color: #0000ff">class</span>, <span style="color: #0000ff">new</span> BitmapTrueFont.BitmapTrueFontParameter(null));</pre></div></blockquote><img src ="http://www.cppblog.com/codejie/aggbug/206115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2014-03-09 21:03 <a href="http://www.cppblog.com/codejie/archive/2014/03/09/206115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>I;P: Game for Programmers and wanting to be Programmers</title><link>http://www.cppblog.com/codejie/archive/2014/03/05/206037.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 04 Mar 2014 16:10:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2014/03/05/206037.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/206037.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2014/03/05/206037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/206037.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/206037.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 夜夜不停地敲啊敲, 身心甚是疲惫, 今晚来个痛快吧~ 发狠了 -- 贴几张I;P的截图来! 习惯来说, 这样会逼迫自己快点完成其它部分, 以早日发布, 早日收工...</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; <strong>I;P - I am a Programmer;</strong></p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 这次I;P是个Game for Android, 标题来自全称中的I, P和最后的分号(;), 为啥选分号? 不解释了, 谁叫咱是个C/C++程序员呢...</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; I;P简单来说, 就是一个"搬箱子"游戏. 但做为程序员, 搬个箱子, 拿最好是输入"指令", 然后点击"运行", 让别人去"搬"吧...</p> <p>&nbsp;&nbsp;&nbsp; 都说一个GAME要有个"宏伟"的背景故事才会被人记住 -- 实际呢, I;P也是有的...</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p> <p align="center">在遥远的未来, </p> <p align="center">一颗遥远的星球上, </p> <p align="center">一台全宇宙最为强大的电脑前, </p> <p align="center">你, </p> <p align="center">做为唯一在前次帝国大战中幸存下来的</p> <p align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- 程序员, </p> <p align="center">需要在即将爆发的新战争前完成一个关系到帝国生存任务</p> <p align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---- 搬箱子~~</p> <p align="center">&nbsp;</p> <p align="center">&nbsp;</p> <p align="left">&nbsp;&nbsp;&nbsp; 哈哈...废话不说, 先上图了...</p> <p align="left">&nbsp;</p> <p align="left"><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_1_2.png"><img title="ip_1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ip_1" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_1_thumb.png" width="604" height="364" /></a></p> <p align="left"><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_2_2.png"><img title="ip_2" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ip_2" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_2_thumb.png" width="604" height="364" /></a></p> <p>&nbsp;&nbsp;&nbsp; </p><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_3_2.png"><img title="ip_3" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ip_3" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_3_thumb.png" width="604" height="364" /></a> <a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_4_2.png"><img title="ip_4" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ip_4" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/IP-Game-for-Programmer_14C29/ip_4_thumb.png" width="604" height="364" /></a>  <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;&nbsp; 搞定, 这样I;P最迟本周末应该可以发布了~睡觉去了~</p><img src ="http://www.cppblog.com/codejie/aggbug/206037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2014-03-05 00:10 <a href="http://www.cppblog.com/codejie/archive/2014/03/05/206037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>G7 : Manually update to Kitkat 4.4 and root it.</title><link>http://www.cppblog.com/codejie/archive/2013/11/27/204474.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 27 Nov 2013 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/11/27/204474.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/204474.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/11/27/204474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/204474.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/204474.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 先说下, 这次不是我的G7, 它在4.2.2下活的不错, 先不折腾它了...</p> <p>&nbsp;&nbsp;&nbsp; 手里还有个Nexus 4, 刚拿来是就已经是4.3了, root之后一直用着调试在敲的游戏(I;P), 今天(三天前)接到系统更新, Kitkat 4.4来了, 手一抖就升级了...但由于root过, 中间出了点差错, 然后就没有4.4更新通知了...</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 一冲动, 根据XDA上的帖子, 自己下载了Kitkat的升级包, 来了此纯手工的升级体验. 记录在此. 原始帖子在这里: <a href="http://forum.xda-developers.com/showthread.php?t=2018179"><font color="#0066cc">http://forum.xda-developers.com/showthread.php?t=2018179</font></a></p> <p>&nbsp;&nbsp;&nbsp; 注: 此法升级为'破坏性'升级, 原有的数据会全部被删除, 记得备份哦...</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 1. 准备</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. 下载安装Android SDK;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://developer.android.com/sdk/index.html"><font color="#0066cc">http://developer.android.com/sdk/index.html</font></a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 下载Nexus 4的 Kitkat 4.4升级包; (occam-krt16s-factory-2006f418.tgz)</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="https://developers.google.com/android/nexus/images"><font color="#0066cc">https://developers.google.com/android/nexus/images</font></a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. 下载CWM Recovery Image; (recovery-clockwork-touch-6.0.4.3-mako.img)</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://clockworkmod.com/rommanager">http://clockworkmod.com/rommanager</a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d. 下载SuperSu更新包; (UPDATE-SuperSU-v1.80.zip)</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://download.chainfire.eu/370/SuperSU">http://download.chainfire.eu/370/SuperSU</a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (后两个是为了Root用的)</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 2. 升级</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. 解压升级包(occam-krt16s-factory-2006f418.tgz), 解开后包里含有下面文件:</p> <p><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/G7-_BF68/image_2.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/G7-_BF68/image_thumb.png" width="516" height="161" /></a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 在安装有Android SDK工具的目录下打开一个Command窗口, 通过USB连接好手机, 输入下面的命令</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;adb reboot bootloader</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后手机会重启到bootloader界面. 检查界面上的数据, 如果此时没有unlock, 通过下面命令解锁;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;fastboot oem unlock</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再次输入下面命令, 重启手机;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;adb reboot bootloader</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后, 点击前面解压文件中的flash-all.bat, 等待运行结束, 再重启, 此时手机就升级到Google原生的Kitkat 4.4了.</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (此后还可以通过fastboot命令再次锁定boot)</p> <p><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/G7-_BF68/4.4_1_2.png"><img title="4.4_1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="4.4_1" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/G7-_BF68/4.4_1_thumb.png" width="292" height="484" /></a><a href="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/G7-_BF68/4.4_2_2.png"><img title="4.4_2" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="4.4_2" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/G7-_BF68/4.4_2_thumb.png" width="292" height="484" /></a></p> <p>&nbsp;&nbsp;&nbsp; 3. root</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我觉得Root也不是什么'神秘'的事情, 实际就是Android本身少了个su命令, 而没法做root能做的事情了, 所以呢, 装个su进去就好了.</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Android系统上有三层, bootloader, Recovery和ROM, 简单理解就是bootloader加载Recovery和ROM, 而Recovery用于安装和管理ROM. 前面装好了官方的4.4 ROM, bootloader也是有的, 那么再装个Recovery就好了, 因为官方系统是没有Recovery的.</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. 启动系统到bootloader</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;adb reboot bootloader</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 刷Recovery</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;fastboot flash recovery recovery-clockwork-touch-6.0.4.3-mako.img</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. 重启系统, 拷贝SuperSu (UPDATE-SuperSU-v1.80.zip) 到SDCard上 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d. 启动系统的Recovery</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;adb reboot recovery</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e. 安装su命令到系统</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Recovery模式下, 选择'install zip from sdcard'找到SuperSu的压缩包, 点击安装, 然后重启</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK, 这时就能在adb shell中使用su命令了, 也就是Root了.</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 4. 其它问题</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里需要注意的时, 再次启动到Recovery模式, 系统会显示没有Recoery系统, 可以通过如下命令'固定'Recovery.</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;adb shell</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $su</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #mount -o remount,rw -t ext4 /dev/block/mmcblk0p1 /system</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #mv /system/etc/install-recovery.sh /system/etc/install-recovery.sh.bak</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样Recovery就被固定下来了, 下次就可以继续使用了, 但还有个问题, 那就是此时SuperSU没法正常使用了, 点击SuperSu会提示'Su需要手工安'等类似的错误, 要解决这个很简单, 再通过Recovery安装一次SuperSu安装包就好了.</p><img src ="http://www.cppblog.com/codejie/aggbug/204474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-11-27 14:24 <a href="http://www.cppblog.com/codejie/archive/2013/11/27/204474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android DEV : Custom new state for TextView</title><link>http://www.cppblog.com/codejie/archive/2013/10/09/203617.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 09 Oct 2013 09:37:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/10/09/203617.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203617.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/10/09/203617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203617.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203617.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; Android中的常用View, 如TextView, Button等, 都有state概念 -- state_pressed, state_selected, state_enabled等等, 这些状态都是boolean类型的变量, 可以通过其set/get方法读取或者设置这些状态.<br />
&nbsp; &nbsp; 状态的概念在其他平台或者GUI库中都是存在的, 因为这些是View的基本属性, 但Android中将其与View的Color/Drawable属性捆绑起来的做法极大地简化了UI中维护状态变化与其它属性变化的操作. 具体可参看如下Android文档 -- <a href="http://developer.android.com/reference/android/content/res/ColorStateList.html">ColorStateList</a>.<br />
<br />
&nbsp; &nbsp; Android的TextView自身提供了很多state, 比如state_selected. 在实际使用中, 我们可以通过此属性, 结合selector一起来实现某些需求 -- 同一字符串通过二元的颜色来标明状况的不同, 如一封邮件是否读取过等等. 但如果此时使用state_selected会引起个问题 -- 如果此时真的'选中'了当前的TextView, 就会引起不必要的'混乱'. 这是因为系统的'选中', 如使用方向键选中, 和代码中的setSelected()是有相同效果的. 此时有何感想? 是不是真心觉得state不够用呢? &nbsp;因此 --&nbsp;<br />
<br />
&nbsp; &nbsp; 今天咱们聊个好玩的 -- 自己定制state!<br />
<br />
&nbsp; &nbsp;基本思想很简单 -- state是View的属性项, 那么为了定制state, 只需为View创建相应的新的state属性项, 然后封装个能处理此属性的TextView类即可.<br />
<br />
&nbsp; &nbsp;1. 定义新的state属性项<br />
&nbsp; &nbsp; &nbsp; &nbsp;在attrs.xml中(其实什么xml都可以, 只要放到res下能看到就好)定义新的state属性.
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="font-size: 13px; color: #0000ff;">&lt;?</span><span style="font-size: 13px; color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="font-size: 13px; color: #0000ff;">?&gt;<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">declare-styleable&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="MyCustomTextView"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">attr&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="state_unread"</span><span style="color: #FF0000; ">&nbsp;format</span><span style="color: #0000FF; ">="boolean"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">declare-styleable</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span></div>
<br />
&nbsp; &nbsp; 2. 创建新的TextView类<br />
&nbsp; &nbsp; &nbsp; &nbsp; 继承与TextView类, 创建自定义TextView类以处理新的state属性.<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MyCustomTextView&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;TextView&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>[]&nbsp;STATE_UNREAD&nbsp;=&nbsp;{&nbsp;R.attr.state_unread&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;mIsUnread&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setUnreadState(<span style="color: #0000FF; ">boolean</span>&nbsp;isUnread)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mIsUnread&nbsp;=&nbsp;isUnread;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refreshDrawableState();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;<span style="color: #0000FF; ">int</span>[]&nbsp;onCreateDrawableState(<span style="color: #0000FF; ">int</span>&nbsp;extraSpace)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>[]&nbsp;state&nbsp;=&nbsp;<span style="color: #0000FF; ">super</span>.onCreateDrawableState(extraSpace&nbsp;+&nbsp;1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(mIsUnread)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergeDrawableStates(state,&nbsp;STATE_UNREAD);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;state;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</div>
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; a. 定义状态属性项 --&nbsp;<span style="font-size: 13px; color: #0000ff;">private</span>&nbsp;<span style="font-size: 13px; color: #0000ff;">static</span>&nbsp;<span style="font-size: 13px; color: #0000ff;">final</span>&nbsp;<span style="font-size: 13px; color: #0000ff;">int[]&nbsp;STATE_UNREAD&nbsp;=&nbsp;{&nbsp;R.attr.state_unread&nbsp;};</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; b. 定义状态变量 --&nbsp;<span style="font-size: 13px; color: #0000ff;">private</span>&nbsp;<span style="font-size: 13px; color: #0000ff;">boolean&nbsp;mIsUnread&nbsp;=&nbsp;false;<br />
</span>&nbsp; &nbsp; &nbsp; &nbsp; c. 新属性set函数 -- setUnreadState()<br />&nbsp; &nbsp; &nbsp; &nbsp; d. 添加新属性支持 -- 重载onCreateDrawableState()<br />&nbsp; &nbsp; &nbsp; &nbsp; e. 搞定<br /><br />&nbsp; &nbsp; 3. 在selector添加新属性<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">selector&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:custom</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res-auto"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">custom:state_unread</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; ">&nbsp;android:color</span><span style="color: #0000FF; ">="@color/theme_1"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">android:state_selected</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; ">&nbsp;android:color</span><span style="color: #0000FF; ">="@color/theme_2"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">android:color</span><span style="color: #0000FF; ">="@color/theme_0"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">selector</span><span style="color: #0000FF; ">&gt;</span></div>&nbsp; &nbsp; &nbsp; &nbsp; 因为这个state_unread属性是自定义的, 所以要注意添加其ns, 不然会有编译错误 -- 无法找到xxxx定义.<br /><br /><br />&nbsp; &nbsp; Andoird的View提供了灵活的定制功能, 除了state可以如上自定义外, 其它的属性, 比如Font什么的, 都是可以通过此方式实现自定义属性添加的. 反过来, 为了'漂亮'的UI, app所使用的View最好都是'自定义'过的, 哪怕初始只是个简单的继承类, 等到'未来'需要扩展时, 你就懂了, 嘿嘿...<br /><br /><br /><img src ="http://www.cppblog.com/codejie/aggbug/203617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-10-09 17:37 <a href="http://www.cppblog.com/codejie/archive/2013/10/09/203617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Compatible PopupMenu Class</title><link>http://www.cppblog.com/codejie/archive/2013/09/14/203235.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 14 Sep 2013 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/09/14/203235.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203235.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/09/14/203235.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203235.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203235.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 大约两周前, 在修复EL的<a href="http://www.cppblog.com/codejie/archive/2013/09/02/202941.html">2.3.x的兼容问题</a>时, 有一个是PopupMenu相关的, 这个类在API9才有的, 那么在2.3.x平台上就没法用了. 为了能够兼容, 当时用了PopupWindow.<br />&nbsp; &nbsp; 这两天考虑到PopupMenu后面还是很需要的, 且以前的封装仅仅是为了实现播放快速跳转的兼容功能, 没考虑再使用, 所以昨晚重新封装了下, 这样更加方便和实用了.<br /><br />&nbsp; &nbsp; 实现的方式还是在2.3.x平台下使用PopupWindow来实现PopupMenu的功能, 但这次只需要在xml下定义个Menu资源就好了, 不再需要另行准备个PopupWindow所需的Layout资源了, 方便再次使用.<br />&nbsp; &nbsp; 4.x平台下直接就使用Menu资源初始PopupMenu了, 而使用PopupWindow时, 就需要先解析Menu资源文件, 得到所需的Item的ID和Title, 然后使用这些数据初始PopupWindow的View.<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_33.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_32.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp; 封装的ELPopupMenu代码如下:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;jie.android.el.view;<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.util.ArrayList;<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.xmlpull.v1.XmlPullParserException;<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;jie.android.el.R;<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;jie.android.el.utils.Utils;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.Context;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.res.XmlResourceParser;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.graphics.drawable.BitmapDrawable;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.util.AttributeSet;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.Gravity;<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.Menu;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.MenuItem;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.View;<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.View.OnClickListener;<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.ViewGroup.LayoutParams;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.Button;<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.LinearLayout;<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.PopupMenu;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.PopupMenu.OnMenuItemClickListener;<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.PopupWindow;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ELPopupMenu&nbsp;{<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MenuData&nbsp;{<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;id;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;title;<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;MenuData(<span style="color: #0000FF; ">int</span>&nbsp;id,&nbsp;String&nbsp;title)&nbsp;{<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.id&nbsp;=&nbsp;id;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.title&nbsp;=&nbsp;title;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">interface</span>&nbsp;OnItemClickListener&nbsp;{<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;OnClick(<span style="color: #0000FF; ">int</span>&nbsp;item);<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Context&nbsp;context;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resMenuId;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;View&nbsp;parent;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;popup;<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;OnItemClickListener&nbsp;listener;<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ELPopupMenu(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resMenuId,&nbsp;View&nbsp;parent,&nbsp;OnItemClickListener&nbsp;listener)&nbsp;{<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.context&nbsp;=&nbsp;context;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.resMenuId&nbsp;=&nbsp;resMenuId;<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.parent&nbsp;=&nbsp;parent;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.listener&nbsp;=&nbsp;listener;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make();<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;make()&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&nbsp;=&nbsp;makePopupMenu(context,&nbsp;resMenuId,&nbsp;parent);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&nbsp;=&nbsp;makePopupWindow(context,&nbsp;resMenuId,&nbsp;parent);<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;makePopupMenu(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resId,&nbsp;View&nbsp;parent)&nbsp;{<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupMenu&nbsp;pm&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;PopupMenu(context,&nbsp;parent);<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenuInflater().inflate(resId,&nbsp;pm.getMenu());<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.setOnMenuItemClickListener(<span style="color: #0000FF; ">new</span>&nbsp;OnMenuItemClickListener()&nbsp;{<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onMenuItemClick(MenuItem&nbsp;menu)&nbsp;{<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(listener&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.OnClick(menu.getItemId());<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;pm;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getAttributeIntValue(Context&nbsp;context,&nbsp;String&nbsp;resId)&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Integer.valueOf(resId.substring(1));<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;getAttributeStringValue(Context&nbsp;context,&nbsp;String&nbsp;resId)&nbsp;{<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;id&nbsp;=&nbsp;Integer.valueOf(resId.substring(1));<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;context.getString(id);<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;ArrayList&lt;MenuData&gt;&nbsp;analyseMenuResource(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resId)&nbsp;{<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&lt;MenuData&gt;&nbsp;menu&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ArrayList&lt;MenuData&gt;();<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlResourceParser&nbsp;parser&nbsp;=&nbsp;context.getResources().getXml(resId);<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;event&nbsp;=&nbsp;parser.next();<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(event&nbsp;!=&nbsp;XmlResourceParser.END_DOCUMENT)&nbsp;{<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(event&nbsp;==&nbsp;XmlResourceParser.START_TAG)&nbsp;{<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(parser.getName().equals("item"))&nbsp;{<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menu.add(<span style="color: #0000FF; ">new</span>&nbsp;MenuData(getAttributeIntValue(context,&nbsp;parser.getAttributeValue(Utils.NS_ANDROID,&nbsp;"id")),<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getAttributeStringValue(context,&nbsp;parser.getAttributeValue(Utils.NS_ANDROID,&nbsp;"title"))));<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;=&nbsp;parser.next();<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(XmlPullParserException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">111</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;menu;<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;makePopupWindow(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resId,&nbsp;View&nbsp;parent)&nbsp;{<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&lt;MenuData&gt;&nbsp;menu&nbsp;=&nbsp;analyseMenuResource(context,&nbsp;resId);<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(menu.size()&nbsp;==&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnClickListener&nbsp;l&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;OnClickListener()&nbsp;{<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onClick(View&nbsp;v)&nbsp;{<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(listener&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.OnClick(v.getId());<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(popup&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PopupWindow)popup).dismiss();<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AttributeSet&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"LinearLayout",&nbsp;R.id.linearLayout1);<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinearLayout&nbsp;ll&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;LinearLayout(context,&nbsp;attrs);<br /><span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">143</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(MenuData&nbsp;data&nbsp;:&nbsp;menu)&nbsp;{<br /><span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos&nbsp;==&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">145</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"Button",&nbsp;R.id.button1);<br /><span style="color: #008080; ">146</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos&nbsp;==&nbsp;menu.size()&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">147</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"Button",&nbsp;R.id.button3);<br /><span style="color: #008080; ">148</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"Button",&nbsp;R.id.button2);<br /><span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">152</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;btn&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Button(context,&nbsp;attrs);<br /><span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.setId(data.id);<br /><span style="color: #008080; ">154</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.setText(data.title);<br /><span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.setOnClickListener(l);<br /><span style="color: #008080; ">156</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll.addView(btn,&nbsp;ll.generateLayoutParams(attrs));<br /><span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++&nbsp;pos;<br /><span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupWindow&nbsp;pw&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;PopupWindow(ll);<br /><span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">pw.setWidth(250);</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">164</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setWidth(LayoutParams.WRAP_CONTENT);<br /><span style="color: #008080; ">165</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setHeight(LayoutParams.WRAP_CONTENT);<br /><span style="color: #008080; ">166</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setFocusable(<span style="color: #0000FF; ">true</span>);<br /><span style="color: #008080; ">167</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setOutsideTouchable(<span style="color: #0000FF; ">true</span>);<br /><span style="color: #008080; ">168</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setBackgroundDrawable(<span style="color: #0000FF; ">new</span>&nbsp;BitmapDrawable());<br /><span style="color: #008080; ">169</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">170</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;pw;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">171</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">172</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">173</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;show()&nbsp;{<br /><span style="color: #008080; ">174</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show(Gravity.LEFT&nbsp;|&nbsp;Gravity.BOTTOM,&nbsp;16,&nbsp;64);<br /><span style="color: #008080; ">175</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">176</span>&nbsp;<br /><span style="color: #008080; ">177</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;show(<span style="color: #0000FF; ">int</span>&nbsp;gravity,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y)&nbsp;{<br /><span style="color: #008080; ">178</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(popup&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">179</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br /><span style="color: #008080; ">180</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PopupMenu)popup).show();<br /><span style="color: #008080; ">181</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">182</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PopupWindow)popup).showAtLocation(parent,&nbsp;gravity,&nbsp;x,&nbsp;y);<br /><span style="color: #008080; ">183</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">184</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">185</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">186</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">187</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setItemEnabled(<span style="color: #0000FF; ">int</span>&nbsp;item,&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;enabled)&nbsp;{<br /><span style="color: #008080; ">188</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(popup&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">189</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br /><span style="color: #008080; ">190</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu&nbsp;menu&nbsp;=&nbsp;((PopupMenu)popup).getMenu();<br /><span style="color: #008080; ">191</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItem&nbsp;sub&nbsp;=&nbsp;menu.findItem(item);<br /><span style="color: #008080; ">192</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(sub&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">193</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub.setEnabled(enabled);<br /><span style="color: #008080; ">194</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">195</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">196</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;p&nbsp;=&nbsp;((PopupWindow)popup).getContentView();<br /><span style="color: #008080; ">197</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;v&nbsp;=&nbsp;p.findViewById(item);<br /><span style="color: #008080; ">198</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.setEnabled(enabled);<br /><span style="color: #008080; ">199</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">200</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">201</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">202</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">203</span>&nbsp;}<br /><span style="color: #008080; ">204</span>&nbsp;</div><br /><br />&nbsp; &nbsp; 初始PopupWindow的View的资源模板文件如下:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">LinearLayout&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:id</span><span style="color: #0000FF; ">="@+id/linearLayout1"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginLeft</span><span style="color: #0000FF; ">="16dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginRight</span><span style="color: #0000FF; ">="16dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:background</span><span style="color: #0000FF; ">="@android:color/darker_gray"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:orientation</span><span style="color: #0000FF; ">="vertical"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button1"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginTop</span><span style="color: #0000FF; ">="4dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">16</span>&nbsp;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button2"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">21</span>&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button3"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginBottom</span><span style="color: #0000FF; ">="0dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">27</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">LinearLayout</span><span style="color: #0000FF; ">&gt;</span></div><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/codejie/aggbug/203235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-09-14 17:20 <a href="http://www.cppblog.com/codejie/archive/2013/09/14/203235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : be able to support 2.3.x again</title><link>http://www.cppblog.com/codejie/archive/2013/09/02/202941.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sun, 01 Sep 2013 16:22:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/09/02/202941.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202941.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/09/02/202941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202941.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202941.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; EL 1.2中新增了词典功能, 急着release, 就没有在2.3.x下测试 (当然了, 我的G7被我刷成4.2.2之后, 也没有2.3.x的环境了..), 编译没有问题, 4.x上都OK, 然后就release了...&nbsp;唉, 债总是要连本带利地归还的, 现实如此, 敲字亦是如此啊...因此这个周末, 整个周末都在修改EL无法在android 2.3.x上运行的问题.<br />&nbsp; &nbsp; 知道Android有版本碎化问题, 只是没想到这么'细节', 不碰到那真是根本想不到啊...还是前年做IOS好, 就没考虑版本问题,当然也可能没碰到.&nbsp;不吐槽了, 敲字的人嘛, 抱怨不能解决问题啊, 还得靠review/debug...<br />&nbsp;<br />&nbsp; &nbsp; 这次发现了两处不兼容的地方, 一个是java语言层面的, 另外一个则是android控件相关的.<br /><br />&nbsp; &nbsp; 1. ByteBuffer<br />&nbsp; &nbsp; EL在从Lingoes词典文件中提取数据时, 需要使用InflaterInputStream对象解压原始数据, 代码如下:<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;decompressBlock(ByteBuffer&nbsp;in,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;size,&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;out)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Inflater&nbsp;inflater&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Inflater();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;a&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">if</span><span style="color: #ff0000;">&nbsp;(in.hasArray())&nbsp;{</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #ff0000;">=</span><span style="color: #ff0000;">&nbsp;in.array();</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #ff0000;">else</span><span style="color: #ff0000;">&nbsp;{</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #ff0000;">=</span>&nbsp;<span style="color: #ff0000;">new</span>&nbsp;<span style="color: #ff0000;">byte</span><span style="color: #ff0000;">[size];</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.position(</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">);</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.get(a,&nbsp;</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">,&nbsp;size);</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;InflaterInputStream&nbsp;stream&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;InflaterInputStream(<span style="color: #0000FF; ">new</span>&nbsp;ByteArrayInputStream(a,&nbsp;0,&nbsp;size),&nbsp;inflater,&nbsp;size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(stream.read(out)&nbsp;&gt;&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inflater.end();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />&nbsp; &nbsp; 此对象的一个传入参数为InputStream, 这样正好将ByteButter对象数组化为byte[]后, 构造出一个ByteArrayInputStream实例传入. 那么ByteBuffer常用且推荐的方式就是直接调用其array()方法, 这样就无需在申请和构造个新的byte[]空间了.<br />&nbsp; &nbsp; 问题就在这里, 在android 2.3.x中, ByteBuffer对象是不支持直接数组化的, 在调用arry()时, 会抛出NotSupportedException异常的. 因此为了保持兼容就需要在数组化前使用hasArray()方法检查是否可以数组化, 如果不能, 那就要重新申请数组空间了.<br /><br />&nbsp; &nbsp; 2. PopupMenu<br />&nbsp; &nbsp; EL在播放时, 支持快速跳转到ESL课程的指定位置上. 如下图所示.<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_29.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_30.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp; 指定位置的选择菜单是通过PopupMenu实现的, 但这个控件是在API 11才有的, 意味着低于HONEYCOMB版本的2.3.x平台是没法使用的. 实际这个问题可以早点发现的, 但我就是懒了, 以后relase前, 还是需要运行下Android Lint的.<br />&nbsp; &nbsp; 上图可以看出在两种平台下, 这个'PopupMenu'是不一样的, 那是因为2.3.x平台上, 我是用PopupWindow控件模拟了类似PopupMenu的功能. 以后有时间看看能不能搞的UI也一样就好了.<br />&nbsp; &nbsp; 这种控件上的不兼容, 可以使用不同平台下运行不同代码来解决.<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;showPopupMenu(View&nbsp;v)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupMenu&nbsp;pm&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;PopupMenu(getELActivity(),&nbsp;v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenuInflater().inflate(R.menu.fragment_show_pop,&nbsp;pm.getMenu());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenu().getItem(0).setEnabled(audioSlowDialog&nbsp;!=&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenu().getItem(1).setEnabled(audioExplanation&nbsp;!=&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenu().getItem(2).setEnabled(audioFastDialog&nbsp;!=&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.setOnMenuItemClickListener(<span style="color: #0000FF; ">new</span>&nbsp;OnMenuItemClickListener()&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onMenuItemClick(MenuItem&nbsp;item)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;onNavigate(item.getItemId());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.show();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;ShowPopWindow&nbsp;win&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ShowPopWindow(getELActivity(), v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setItemEnable(0,&nbsp;(audioSlowDialog&nbsp;!=&nbsp;-1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setItemEnable(1,&nbsp;(audioExplanation&nbsp;!=&nbsp;-1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setItemEnable(2,&nbsp;(audioFastDialog&nbsp;!=&nbsp;-1));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setOnClickListener(<span style="color: #0000FF; ">new</span>&nbsp;OnClickListener()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onClick(View&nbsp;v)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onNavigate(v.getId());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.dismiss();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.show();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />&nbsp; &nbsp; 本来想着更新下修改好的EL版本赶紧release了, 毕竟2.3.x还占有30%左右的份额, 是不能放弃的部分. 但还是有些心虚, 所以啊, 再检查下, 明天再说吧..(整个周末都在fix兼容问题, 头昏眼花啊, 睡觉去了...唉, 毕竟java没有C++玩的那么久, 很多基本的语言级别的问题都不清楚, 还要多敲敲才行啊..)<img src ="http://www.cppblog.com/codejie/aggbug/202941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-09-02 00:22 <a href="http://www.cppblog.com/codejie/archive/2013/09/02/202941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : ESL with LAC</title><link>http://www.cppblog.com/codejie/archive/2013/08/24/202526.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 24 Aug 2013 14:24:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/24/202526.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202526.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/24/202526.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202526.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202526.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>, <strike><a href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a></strike>,&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/13/202525.html">查看EL闲扯贴</a>, <a href="http://www.cppblog.com/codejie/archive/2013/08/18/202625.html">1.1 alpha说明</a>, <a href="http://www.cppblog.com/codejie/archive/2013/08/23/202720.html">1.2 Release说明</a>, <a href="http://www.cppblog.com/codejie/archive/2013/09/07/203062.html">1.3.0</a>, <a href="http://www.cppblog.com/codejie/archive/2013/09/28/203461.html">1.4.0</a>, <a href="http://www.cppblog.com/codejie/archive/2013/10/09/203623.html">1.5.0</a>, <a href="http://www.cppblog.com/codejie/archive/2013/10/21/203861.html">1.6.0</a><br />
     </li>
</ul>
<br />
<strong>说明文档</strong><br />
0. EL是什么?<br />
&nbsp; &nbsp; EL (ESL with LAC) 是一个android平台上的应用, 其可将ESL (www.eslpod.com) 的课程加载到应用中, 边看边听; 且内置了Lingoes(www.lingoes.net)的Vicon English-Chinese词典, 能够实时查看某些单词的此意. 使用EL可以随时随地地看英语, 听英语, 对学习英语单词及锻炼英语的听力很有帮助.<br />
<br />
<div>1. 下载安装<br />
&nbsp; &nbsp; EL支持从android 2.3 到android 4.3版本.</div>
<div>&nbsp; &nbsp; 目前EL只在这里提供下载, 一时应该不会放到各个应用中心, 这里还请各位多多传播扩散呀. 下载到本地的文件名应为EL.apk, 安装到android手机即可.应用安装后的图标如下所示:<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_5.png" border="0" alt="" width="128" height="129" /></div>
<div></div>
<div><br />
2. 启动过程</div>
<div>&nbsp; &nbsp; 点击EL应用图标启动EL后, EL会启动并连接自身的服务进程, 如下图所示. 在第一次启动时, 由于服务进程需要初始化本地词典数据库, 启动时间会比较长,大约在3~5秒间. 再次启动时,进度条应该只是一闪而过.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_1.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; EL启动后, 如果发现内容列表为空, 将会自动从自带的压缩包中加载ESL的第一篇内容 -- 'ESL Introduction'. 此时应用界面如下所示. 当压缩包导入到EL中后,在系统状态栏中有相应的提示信息显示.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_2.png" border="0" alt="" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_3.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div><br />
3. 使用说明</div>
<div>&nbsp; &nbsp; 在内容列表中,点击需要查看/播放的ESL课程记录, EL将显示指定课程的内容文本, 并自动播放相应的mp3音频文件.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_6.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_8.png" border="0" alt="" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; ESL课程除早期的课程只有两部分外, 一般包括三部分; 先是慢速读遍课程内容, 然后是对内容的讲解部分, 最后是正常语速再读遍课程内容. 如上图所示EL会显示课程内容文本部分, 并高亮显示在ESL讲解中着重提到的单词和句子. EL目前有三种高亮 -- 一是ESL课程原文中高亮的语句中的句子, 颜色如上图中'we try to talk .."部分; 二是原文中高亮语句中的单词, 颜色如'venue'单词所示 ; 三是我自己觉得'难'的单词, 如'especially'(如此可以看出我的E文水平不是?!). 后两种高亮的单词是可以点击查看解释的,如下图所示. &nbsp;此时点击所查单词, TTS会读出此单词发音.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_7.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; 第三种高亮方式的来由是因为EL自带的ESL第一课原文中没有任何的'着重'语句,但我又想让大家知道EL还有查词的功能,所以就加上了这种方式. 后面会考虑通过配置方式不显示这种高亮方式的, 也省的制作时需要我一个一个单词去看了...目前,这些高亮部分都需要在内容包制作时完成的, 还没有找到能自动化完成制作的方法, 所以比起敲打EL来说, 内容包的制作怕是要消耗更多的夜晚了. 以后的EL版本中可能会考虑使用用户自选单词方式高亮,或者用户选中单词后显示解释的方式, 但..这些都是后话了...</div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; 在播放时, 点击图中播放进度栏,可以打开更多的播放操作选项. 如下图所示.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_9.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_10.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; 五个按钮分别是'快速移至菜单'(暂未支持), 随机播放, 前一个, 暂停/播放和下一个.&nbsp;</div>
<div></div>
<div>&nbsp; &nbsp; 在播放开始时, EL会在系统状态栏中显示播放通知; 播放完毕后, 将自动删除此通知.<br />
<br />
&nbsp; &nbsp; 播放时点击回退按钮, EL将关闭当前播放, 并返回到内容列表界面去; 如果播放时将EL切换到后台/被其他app覆盖, 或锁屏等, 音频播放不会被关闭. 此时可以通过点击系统状态栏中显示的播放通知, 快速切换会EL的播放界面. 未来将实现在播放通知中直接控制播放, 比如暂停, 关闭, 甚至播放下一篇等.</div>
<div></div>
<div><br />
&nbsp; &nbsp; 2. 词典功能&nbsp;&nbsp;<br />
&nbsp; &nbsp; 在应用的标题栏上有个新的'放大镜'图标, 在除播放界面外的其它界面中点击此图标, 即可进入词典界面; 在播放界面中点击图标不会直接进入到词典界面, 需要点击输入键盘中的'查询'按钮才能进入. 为了可能会改成直接在播放界面中显示查询结果.&nbsp;<br />
&nbsp; &nbsp; 词典界面如下图所示. 此时输入字母, EL将实时显示查询到的单词, 默认一次显示20个. 如果还有更多单词需要显示, 只需向上拖单词列表, EL会自动加载剩余符合条件的单词, 直至显示全部单词. 说明下, 部分设备, 尤其是一些Android平板, 一次肯定不止能显示20个,但不用担心, 只要拖动一次后, EL会自动判断出一次最多能加载多少个单词的.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_20.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_21.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 点击列表中的单词, 将弹出如下解释窗口. 窗口跟内容播放界面中使用的是相同的窗口, 因此点击窗口中的单词, 是同样可以使用TTS发音的.&nbsp;<br />
&nbsp; &nbsp; 弹出窗口的外形做了修改, 不在是圆角方框, 而是充满屏幕宽度的方形框. 这样弹出窗口看起来比较'平', 这概念现在比较'流行'不是?<br />
<br />
&nbsp;4. 应用菜单</div>
<div>&nbsp; &nbsp; 点击EL右上角菜单项,或者按下手机菜单按钮,可见如下EL菜单项.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_35.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div></div>
<div><br />
<span style="font-size: 14px;">5. 背诵(Reciting)功能<br />
</span>&nbsp; &nbsp; 如上图所示, 当在ESL课程显示和词典界面中,&nbsp;单词被查询时, 在应用弹出其解释窗口中可以<strong>通过长时间点击(Long Click)单词的方式将单词添加到生词本</strong>中, 此时应用会显示图中的提示信息, 表示已完成添加操作.<br />
&nbsp; &nbsp; 点击菜单中的'My Vocab'选项, 应用切换到Recting界面. 类似<a href="http://www.cppblog.com/codejie/archive/2010/04/01/111306.html">LingosHook</a>和<a href="http://www.cppblog.com/codejie/archive/2012/08/30/164888.html">LAC</a>的记忆功能, 通过对单词的'熟悉度'打分来判断对单词的记忆程度.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_36.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_37.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; a. 根据自己的单词的熟悉程度选择相应的选项, 亦称打分. 从熟悉到陌生, 一共四个级别.<br />
&nbsp; &nbsp; b. 选择相应的'熟悉度'后, 将在下方显示单词的解释. 此功能可以在设置中关闭或者开启;<br />
&nbsp; &nbsp; c. 此时可以通过'正确'和'错误'来判断自己的打分是否正确, 通过此判定及其打分的情况, 应用决定当前单词的'分数', 以决定此单词下次出现的时机.<br />
<br />
&nbsp; &nbsp; 单词被加载,或者点击单词时, 应用会调用TTS播放单词发音。<br />
<br />
6. 生词本(Vocab)功能<br />
&nbsp; &nbsp; 在背诵界面中可以看到, 动作栏上的图标由'Search'变为'Vocab'了, 此时点击图标, 将进入到如下单词本(Vocab)界面中.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_38.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_39.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 单词本界面中列出了所有的'生词'. 点击菜单, 可以按照单词的字母顺序或者分数进行排序显示,&nbsp;<strike>亦可安装ESL课程/单词分数/添加时间进行分组显示.</strike>(分组还没完成, 先写着, 下次就可以懒了.)<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_40.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_42.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 单击菜单中的'Edit', 可以删除生词本中的单词.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_41.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 在生词本界面中可以看到, 动作栏中的快捷图标已经变为'Reciting', 此时点击图标, 可以快速返回到背诵界面. 由于生词本是通过背诵界面进入的, 所以当生词本中含有单词时, 点击返回按钮就返回到背诵界面.<br />
<br />
7. 配置选项</div>
<div>&nbsp; &nbsp; 选择菜单项中的'Setting'菜单, 在打开的配置界面中, 目前有如下配置项:<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_43.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div><br />
&nbsp; &nbsp; 'Stop After Current' : 当前内容播放完毕后,停止播放; 此项不选中时, 在播放完毕时, EL会自动播放下一篇内容;</div>
<div>&nbsp; &nbsp; 'Random Order&nbsp;Play' : 随机播放; 选中此项, 当播放完毕后, EL会随机播放下一篇内容; 否则将按照安装的ESL课程顺序播放;<br />
&nbsp; &nbsp; 'Don't Automatically Play' : 不自动播放; 选中此项后, 点击内容列表中的课程, 进入播放界面中后, 不再自动播放了;</div>
<div></div>
<div>&nbsp; &nbsp; 'Medium Font Size' : 中等字体显示内容; 选中此项后, EL将使用标准字体尺寸的120%显示内容;</div>
<div>&nbsp; &nbsp; 'Large Font Size' : 大字体显示内容; 选中此项后, EL将使用标准字体尺寸的150%显示内容;<br />
&nbsp; &nbsp; 'Automatically Hide Tile' : 如下面两个图片对比, 选中此项, 播放界面中的Title部分将在1.5秒后自动隐藏,以增大内容显示面积;<br />
&nbsp; &nbsp; &nbsp;'Automatically Speak Words': 自动播放单词发音. 在背诵界面中, 当单词加载到界面中时, 自动播放其发音.<br />
&nbsp; &nbsp; &nbsp;'Random Load Words': 随机加载单词. 默认情况下, EL根据单词的'分数'大小决定加载的顺序;<br />
&nbsp; &nbsp; &nbsp;'Show Word Explanation': 显示单词解释. 当选择了单词的'熟悉度'后, EL将显示单词的解释; 如果关闭此选项, 在选择后, EL将判定选择'正确', 并直接加载下一个单词;<br />
&nbsp; &nbsp; &nbsp;'Double Check Result': 再次判定选择的结果. 在选择单词'熟悉度'后, 用户可以再次判定选择是否正确, 以此来调整单词的分数; 如果关闭此项, 界面中将只现在'正确'选择项;<br />
&nbsp; &nbsp; &nbsp;'Auto-Delete High Score Words': 自动删除高分单词. 随着对单词的'熟悉', 单词的分数将不断增长, 当增长至指定值时(目前为90), 通过此选项可以自动删除这些高分单词.&lt;<br />
<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_23.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_24.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div></div>
<div><br />
&nbsp; &nbsp; Don't Load Extension Words : 在词典界面中查询时, 有些单词是其它单词的'Extension'形式, 比如Searches是Search的'Extension'. 当选中此项时, Searches将不会被查询出来.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_26.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_25.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; 8. 下载选项</div>
<div>&nbsp; &nbsp; 通过下载界面, 可以使用WIFI网络下载更新EL的内容包. 选中菜单项中的'Download'菜单,可打开如下EL下载界面.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_13.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_14.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div></div>
<div>&nbsp; &nbsp; 在配置界面中,输入正确的'Request Code'和'Check Code'后,点击'Submit'按钮. EL开始下载指定的内容包, 并在android系统状态栏中显示如下通知信息.</div>
<div></div>
<div>&nbsp; &nbsp; EL的内容包相关信息将在另外的帖子中说明(主要是内容包还没有时间去开始制作...), 目前只能提供一个测试用内容包, 下载信息如下:</div>
<div>&nbsp; &nbsp; Request Code : 0000-3-00-00</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;Check Code : 0-00-00<br />
<br />
<div></div>
</div>
<div>&nbsp; &nbsp; 在下载界面中输入以上数据, 可以通过WIFI下载到ESL的第十五篇内容内容压缩包. 目前EL只能通过WIFI下载内容包, 那是因为内容包比较大, 一篇的大小在七到八兆间. 我曾计划十篇一个包, 那就要八九十兆了, 后来放到五篇一个包,也要四十兆左右, 所以还是用WIFI方式下载比较好. 如果需要, 以后可以添加配置, 支持3G等数据链路下载方式.</div>
<div>&nbsp; &nbsp; 当压缩包下载完成后, EL会自动安装内容包, 并在系统状态栏中有如下通知信息.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_15.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 由于EL下载使用的是系统提供的标准下载组件(标准到, 都可以在系统自带的下载管理应用中看到EL的下载内容), 因此在下载过程中, 不影响EL的使用, 也可被关闭. 当EL再次启动时, 会自动检查下载状态, 以确认是需要导入已经下载的内容包, 还是需要重新下载. 由于使用了标准下载组件, 有时点击'submit'后, 似乎EL没有反应, 请再多等下, 状态栏上的下载通知就会显示出来的, 点多了啊, 那就会有多个下载了...<br />
&nbsp; &nbsp; 另外, 由于数据存放的服务器都是第三方的空间, 一个是国内的, 一个是国外的, 下载质量和速度没法控制, 甚至一次的连接数我都不控制不了, 所以这里先说抱歉了...(求包养, 求空间...)<br />
<br />
9. 版本升级<br />
&nbsp; &nbsp; EL升级只需下载新的apk包, 然后安装即可, 原有已下载安装的内容包不会丢失的; 因为和ESL课程相关的内容都存放在SD卡上.&nbsp;<br />
<br />
10. 检查内容包更新<br />
&nbsp; &nbsp; 这个是EL 1.3.0中添加的功能, 如下图所示.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_31.png" border="0" alt="" width="240" height="400" /><br />
<br />
<span style="font-size: 14px; line-height: 21px;">&nbsp; &nbsp; 点击'Check for new packages'按钮, EL将取回EL内容包的更新列表,&nbsp;</span>更新列表含有三列内容: 内容包的序号, 更新时间和ESL课程.<br />
<br />
<a href="http://www.cppblog.com/codejie/archive/2013/10/09/203623.html">Release 1.5.0 更新</a>:<br />
<br />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">1. 自动下载/安装新版本</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 这个功能应该在EL第一版的时候就该支持, EL没有放到任何的'应用商店'中, 这意味着不会自动通知和下载, 每次更新都要用户下载apk包, 然后再安装, 这真是罪过啊...对不起啊, 我也是才想起来, 所以赶紧就加上了.</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 如下图所示, 当点击'Check for new packages' 按钮时, 如果EL发现有新版本了, 就会自动提示是否下载安装. 在确认下载安装后, EL会开始下载新版本, 并在下载完成时自动安装.</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_49.png" border="0" alt="" width="240" height="400" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_50.png" border="0" alt="" width="240" height="400" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_51.png" border="0" alt="" width="240" height="400" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 下载提示只会每次检查新包时会提示一次, 但在About界面中总会显示最新版本的(Latest Version is xxx). 另外, EL的数据是放置在sdcard上的, 只要不删除数据文件, 更新EL并不会丢失原来的数据.</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 这里需要说明下, 根据Android的安全机制, 并不能保证下载后的EL安装包能够安装成功, 可能由于权限, 或者签名等等问题导致无法安装或者安装失败. 当失败时, 因为EL安装包已经下载好了, 只需要打开sdcard下的</span><strong style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">/jie/el/cache/el.apk</strong><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">文件手工安装下皆可, 不需要再下载和拷贝安装EL安装包了. (想来像我这样直接全手工制作和安装Android ROM的应该不多吧? 这样做的好处就是 -- 想干嘛就干嘛...)</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 2. 通知栏中控制播放</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 当EL播放时候被切换到后台时会有通知显示在通知栏中, 如下图所示. 现在可以直接通过这个通知来控制后台的播放, 而不再需要打开EL了, 方便不?&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_52.png" border="0" alt="" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 点击通知中的图标,可以进行相应的操作 -- 前一个, 播放/暂停, 下一个和关闭.&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 由于Android 2.3.x不支持这个功能, 所以2.3.x版本上的EL的播放通知还是原来的样子, 只能直接点击切换到EL, 而不能像现在这样直接控制播放.&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 另外, 现在只有EL在播放是被切换到后台时, 才在通知栏中显示通知. 不再像前面的版本每次播放都现在通知了. (省的每次切换是都显示下通知, 好闪啊...)</span><br />
<br />
<a href="http://www.cppblog.com/codejie/archive/2013/10/21/203861.html">Release 1.6.0 更新</a><br />
<p>&nbsp;&nbsp;&nbsp; 1. EL的Widget</p>
<p><img title="el_54" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_54" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_54_3.png" width="240" height="400" /><img title="el_55" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_55" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_55_3.png" width="240" height="400" /><img title="el_56" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_56" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_56_3.png" width="240" height="400" /></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 上图所示, EL新增的Widget跟其播放界面中的操作栏完全一致, 功能也一样, 包括播放的快速定位选择. (这个酷不? 我还没见过哪个app像EL这样无聊到在Widget上添加个'菜单', 嘿嘿~) 点击Widget中的EL图标, 可以快速打开EL应用.<br /><br /><br /></p>
&nbsp; &nbsp;有任何问题请跟帖或者直接邮件来...最后,求关注, 求扩散.. enjoy it !</div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div><img src ="http://www.cppblog.com/codejie/aggbug/202526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-24 22:24 <a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Saving Battery</title><link>http://www.cppblog.com/codejie/archive/2013/08/22/202692.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 21 Aug 2013 16:28:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/22/202692.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202692.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/22/202692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202692.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202692.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; 下班路上用EL听ESL, 没到家电池就没了...<br />
&nbsp; &nbsp; 下了车, 边走边算计着 -- 应该是高亮全开看小说(现在换成&lt;冰与火之歌&gt;了..)导致没电的, 但为啥以前不用EL时, 听个ESL不会没电呢...会不会EL比较耗电?<br />
<br />
&nbsp; &nbsp; 晚上火力全开, 反省代码 -- 一个异步线程, 用于通知UI更新播放轨迹的, 后台播放时也在不停的running... <br />
&nbsp; &nbsp; 这个线程本身就是sleep()个几百毫秒, 然后通知UI更新下音频播放的位置. 虽没有数据表明这样的'轻'线程会消耗多大电量, 但本着有CPU跳动, 就会有电量消耗的原则, 改了...<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;TickCounterTask&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;AsyncTask&lt;Void,&nbsp;Void,&nbsp;Void&gt;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;Void&nbsp;doInBackground(Void<img src="http://www.cppblog.com/Images/dot.gif" alt="" />&nbsp;arg0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(isAudioPlaying&nbsp;&amp;&amp;&nbsp;listener&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.onPlaying(player.getCurrentPosition());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(777);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(DeadObjectException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(RemoteException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />&nbsp; &nbsp; 加了listener != null的条件, 这样当UI被切换到后台是, 取消listener, 异步线程即被终止. 嘿嘿, 省了...<br /><br />&nbsp; &nbsp; 终端设备上的app不比PC机的, 除了要考虑UI, Screen Size等问题外, 电量消耗也是必须的啊, 总不能让人为了一个app, 随身背上个三块电板不是? 再说, CPU占多了, 真的很'烫'手啊...<img src ="http://www.cppblog.com/codejie/aggbug/202692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-22 00:28 <a href="http://www.cppblog.com/codejie/archive/2013/08/22/202692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : getPrev() and getNext()</title><link>http://www.cppblog.com/codejie/archive/2013/08/20/202681.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 20 Aug 2013 15:35:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/20/202681.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202681.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/20/202681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202681.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202681.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 早上一朋友问, EL如果支持删除某个课程, 还怎么能支持getPrev()和getNext()? 我很奇怪, 为啥不能呢? 他说, 因为EL的课程号是不连续的, 那么应该是靠连续的记录ID继续上下索引的, 那么当删除某个记录时, 导致ID不连续, 也就不能正常Navigate了, 是不? 除非删除后, 一个一个'搬', 以包装连续.&nbsp;听他说完, 忽然感到轻松 -- 原来'笨蛋'不止我一个啊...<br />&nbsp; &nbsp; 在实现EL对记录的getPrev()和getNext()时, 我也为EL的记录表中没有一个连续的记录ID而郁闷 -- 没有个连续ID, 而课程号本身又不连续, 咋不呢? 那时都还没考虑删除的问题呢. 郁闷地去睡觉, 半夜惊醒才想起, 没有连续记录ID就是设计是觉得这个ID跟课程号在一起太冗余才去掉的, 而getPrev()/getNext(), 完全靠课程号就能搞定的啊, 代码敲的都忘记自己的初衷了, SQL语句也白学了...<br /><br />&nbsp; &nbsp; 于是我把下面ELContentProvider的片段发给他, 并加了句 -- '你咋跟我一样笨呢...'<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; @Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Cursor&nbsp;query(Uri&nbsp;uri,&nbsp;String[]&nbsp;projection,&nbsp;String&nbsp;selection,&nbsp;String[]&nbsp;selectionArgs,&nbsp;String&nbsp;sortOrder)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;matcher.match(uri);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;table&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(res)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_RANDOM:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;elDBAccess.getReadableDatabase();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"esl";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"random()&nbsp;limit&nbsp;1";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_NEXT:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_PREV:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_FIRST:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_LAST:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_EL_ESL_NEXT)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;"idx&gt;"&nbsp;+&nbsp;ContentUris.parseId(uri);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;asc";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_EL_ESL_PREV)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;"idx&lt;"&nbsp;+&nbsp;ContentUris.parseId(uri);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;desc";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_EL_ESL_FIRST)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;asc";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;desc";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;elDBAccess.getReadableDatabase();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;db.query("esl",&nbsp;projection,&nbsp;selection,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;sortOrder,&nbsp;"1");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;}</div>&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp;记录在此, 提醒自己保持清醒...<img src ="http://www.cppblog.com/codejie/aggbug/202681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-20 23:35 <a href="http://www.cppblog.com/codejie/archive/2013/08/20/202681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Fragment and FragmentManager</title><link>http://www.cppblog.com/codejie/archive/2013/08/11/202459.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sun, 11 Aug 2013 02:08:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/11/202459.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202459.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/11/202459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202459.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202459.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 考虑到为了减少UI的'刷新效果',EL使用Fragment来代替常规的Activity方式.<br />&nbsp; &nbsp; Fragment代替Activity的好处很多,比如没有不同UI间切换的'闪动',视觉是上也有加快显示的效果.但这种效果也是有代价的, 大量Activity方式下的工作,在Fragment时,不得不自己来实现,比如UI的'压栈'等等.<br />&nbsp; &nbsp; 这里记录下EL实现中,碰到的跟Fragment相关的问题. (Fragment相关文档的<a href="http://developer.android.com/guide/components/fragments.html">官方链接在这里</a>)<br /><br />&nbsp; &nbsp; 1. 参数传递<br />&nbsp; &nbsp; &nbsp; &nbsp; Activity切换时,可以在StartActivity()时,通过Intent的方式将所需参数传递给下一个Activity. 但在Fragment方式下就不行了,此时可使用/参考Fragment支持的setArguments()和getArguments(). EL中所有Fragment都继承于BaseFragment,在显示Fragment时,使用设计的OnArgument()接口传递参数.<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; &nbsp; &nbsp; fragment.onArguments(args);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentManager.beginTransaction().show(fragment).commit();</div><br />&nbsp; &nbsp; 2. 界面切换<br />&nbsp; &nbsp; &nbsp; &nbsp; FragmentManager是用于管理Fragment的类,通过内部的FragmentTranscation对象实现Fragment的加载/显示/隐藏/移除等操作. EL实现中,使用FragmentSwitcher类封装了FrangmentManager,以实现某些更灵活的Fragment管理,比如某些Fragment在被切换是需要删除,而其他的仅需要隐藏等操作.<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">enum</span>&nbsp;Type&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LIST("list",&nbsp;<span style="color: #0000FF; ">false</span>),&nbsp;SHOW("show",&nbsp;<span style="color: #0000FF; ">false</span>),&nbsp;ABOUT("about",&nbsp;<span style="color: #0000FF; ">true</span>),&nbsp;SETTING("setting",&nbsp;<span style="color: #0000FF; ">true</span>),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOWNLOAD("download",&nbsp;<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;title;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;removed;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Type(<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;title,&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;removed)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.title&nbsp;=&nbsp;title;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.removed&nbsp;=&nbsp;removed;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;getTitle()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;title;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;hasRemoved()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;removed;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Type&nbsp;getType(<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;title)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(title.equals(LIST.getTitle()))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;LIST;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(title.equals(SHOW.getTitle()))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;SHOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;show(Type&nbsp;type,&nbsp;Bundle&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(curType&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(curType&nbsp;==&nbsp;type)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((BaseFragment)&nbsp;fragmentManager.findFragmentByTag(type.getTitle())).onArguments(args);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide(curType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BaseFragment&nbsp;fragment&nbsp;=&nbsp;(BaseFragment)&nbsp;fragmentManager.findFragmentByTag(type.getTitle());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fragment&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragment&nbsp;=&nbsp;create(type);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fragment&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragment.onArguments(args);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentManager.beginTransaction().show(fragment).commit();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curType&nbsp;=&nbsp;type;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />&nbsp; &nbsp; 3. Fragment的栈<br />&nbsp; &nbsp; &nbsp; &nbsp; Activity在切换时,通常情况下可以通过BACK键返回前一个Activity,是因为存在一个'栈'来存放前面的Activity. Fragment也有栈的概念,但在操作上就需要自己主动调用了 -- Fragment隐藏时,压栈; Fragment退出时,出栈.<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;hide(Type&nbsp;type)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BaseFragment&nbsp;fragment&nbsp;=&nbsp;(BaseFragment)&nbsp;fragmentManager.findFragmentByTag(type.getTitle());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fragment&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(type.hasRemoved())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentManager.beginTransaction().remove(fragment).commit();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FragmentTransaction&nbsp;ft&nbsp;=&nbsp;fragmentManager.beginTransaction();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ft.addToBackStack(type.getTitle());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ft.hide(fragment);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ft.commit();<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentManager.beginTransaction().hide(fragment).commit();</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curType&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;showPrevFragment()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;count&nbsp;=&nbsp;fragmentManager.getBackStackEntryCount();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(count&nbsp;&gt;&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;=&nbsp;fragmentManager.getBackStackEntryAt(count&nbsp;-&nbsp;1).getName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentManager.popBackStack();<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;.popBackStackImmediate();</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;type&nbsp;=&nbsp;Type.getType(name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(type&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show(type);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><br />&nbsp; &nbsp; 总的来说,Fragment要想用着方便,自己使用FragmentSwitcher和BaseFragment来封装下FragmentManager和Fragment还是不错的选择.<br /><br />&nbsp; &nbsp; Fragment看起来很美,用起来真是发疯啊.上面这些都是实现EL中碰到的问题,这里做下记录,怕回头又忘记'痛苦地翻文档'的日子...<br /><br />&nbsp; &nbsp; 另,EL基本完工,这两天可发布Alpha版了...<br /><img src ="http://www.cppblog.com/codejie/aggbug/202459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-11 10:08 <a href="http://www.cppblog.com/codejie/archive/2013/08/11/202459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : About ContentProvider</title><link>http://www.cppblog.com/codejie/archive/2013/08/04/202327.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 03 Aug 2013 16:29:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/04/202327.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202327.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/04/202327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202327.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202327.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 本来EL的基本功能在周三已经完成了,打算开始准备EL所需要的数据进行实测了,但却出现个大麻烦,这两个晚上不得不进行大量的'重构'工作(实际就是因为前面偷懒,导致后面重写了)...<br />&nbsp; &nbsp; 先说下大麻烦的来由 -- EL需要两个数据库,一个在应用目录下,叫做lac2数据库;另外一个在sdcard上,叫做el数据库; 这样分开原因是因为el数据库是用户数据库,不想因为用户删除应用,或者重装系统(估计一周刷一次ROM的只有我吧..)而使其数据丢失. 起初想着两个数据库分别被UI和Service使用,并不存在交叉,没必要使用ContentProvider那么一大套框架,所以直接使用两个简单的SQLiteDatabase对象链接/访问各自的数据库了. &nbsp;<br />&nbsp; &nbsp; 现在说下麻烦 -- 随着EL的实现,有了一个不错的idea, 如果Service层可以使用el数据库,将可以增强一个功能, 于是很开心地在Service添加上了通过UI层对el数据库的访问接口;哈,问题来了 -- UI跟Service层是不一样的,是可以被Destroy的. 如果UI都被Destroy,那el数据库还访问个毛啊...<br />&nbsp; &nbsp; 于是在添加这个功能与重写数据库访问部分之间纠结了一晚之后,'毅然'决定'选择前者,'重构'后者了...反正这个跨层访问数据库资源早晚要面对的,总是使用cache和aidl接口访问只会让代码更加混乱.<br /><br />&nbsp; &nbsp; ContentProvider是个好东西,就像总有人说的一样,其在android的架子中与Activity,Intent等概念是在同一层的.通过与Uri, Resolver等的配合,使得app可以非常灵活和方便的访问数据. 实际都知道ContentProvider,但真写起来会发现要实现自己的ContentProvider,还是非常的'罗嗦'的..<br /><br />&nbsp; &nbsp; 现在EL实现了一个ContentProvider,贴在下面,供大家吐槽. 虽然还没有全部完成,但该有的基本元素都有了,还包括了一些'雕虫小技',比如 -- 咋使用'join'...<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;jie.android.el.database;<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.io.File;<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.io.InputStream;<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;jie.android.el.utils.AssetsHelper;<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.ContentProvider;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.ContentUris;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.ContentValues;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.UriMatcher;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.database.Cursor;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.database.sqlite.SQLiteDatabase;<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.net.Uri;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.os.Environment;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ELContentProvider&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;ContentProvider&nbsp;{<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;Tag&nbsp;=&nbsp;ELContentProvider.<span style="color: #0000FF; ">class</span>.getSimpleName();<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;AUTHORITY&nbsp;=&nbsp;"jie.android.el";<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;CONTENT_TYPE&nbsp;=&nbsp;"vnd.android.cursor.dir/vnd.jie.android.el";<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;CONTENT_ITEM_TYPE&nbsp;=&nbsp;"vnd.android.cursor.item/vnd.jie.android.el";<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Uri&nbsp;URI_EL_ESL&nbsp;=&nbsp;Uri.parse("content://"&nbsp;+&nbsp;AUTHORITY&nbsp;+&nbsp;"/el/esl");<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Uri&nbsp;URI_LAC_WORD_INFO&nbsp;=&nbsp;Uri.parse("content://"&nbsp;+&nbsp;AUTHORITY&nbsp;+&nbsp;"/lac/word_info");<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Uri&nbsp;URI_LAC_SYS_UPDATE&nbsp;=&nbsp;Uri.parse("content://"&nbsp;+&nbsp;AUTHORITY&nbsp;+&nbsp;"/lac/sys_update");<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Uri&nbsp;URI_LAC_DICT_INFO&nbsp;=&nbsp;Uri.parse("content://"&nbsp;+&nbsp;AUTHORITY&nbsp;+&nbsp;"/lac/dict_info");<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Uri&nbsp;URI_LAC_WORD_INDEX_JOIN_INFO&nbsp;=&nbsp;Uri.parse("content://"&nbsp;+&nbsp;AUTHORITY&nbsp;+&nbsp;"/lac/word_index_join_info");<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Uri&nbsp;URI_LAC_BLOCK_INFO&nbsp;=&nbsp;Uri.parse("content://"&nbsp;+&nbsp;AUTHORITY&nbsp;+&nbsp;"/lac/block_info");<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_EL_ESL&nbsp;=&nbsp;10;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_ITEM_EL_ESL&nbsp;=&nbsp;11;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_LAC_WORD_INFO&nbsp;=&nbsp;20;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_ITEM_LAC_WORD_INFO&nbsp;=&nbsp;21;<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_LAC_SYS_UPDATE&nbsp;=&nbsp;30;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_LAC_DICT_INFO&nbsp;=&nbsp;40;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_LAC_WORD_INDEX_JOIN_INFO&nbsp;=&nbsp;50;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MATCH_LAC_BLOCK_INFO&nbsp;=&nbsp;60;<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;UriMatcher&nbsp;matcher&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;LACDBAccess&nbsp;lacDBAccess&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<span style="color: #008000; ">//</span><span style="color: #008000; ">should&nbsp;be&nbsp;a&nbsp;subclass&nbsp;of&nbsp;SQLiteOpenHelper&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;ELDBAccess&nbsp;elDBAccess&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;SQLiteDatabase&nbsp;db&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onCreate()&nbsp;{<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initDatabases();<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initMatcher();<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;getType(Uri&nbsp;uri)&nbsp;{<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;matcher.match(uri);<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(res)&nbsp;{<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_EL_ESL:<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_WORD_INFO:<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_SYS_UPDATE:<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_DICT_INFO:<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_WORD_INDEX_JOIN_INFO:<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_BLOCK_INFO:<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;CONTENT_TYPE;<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL:<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_LAC_WORD_INFO:<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;CONTENT_ITEM_TYPE;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IllegalArgumentException("Unknown&nbsp;uri:&nbsp;"&nbsp;+&nbsp;uri);&nbsp;<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Uri&nbsp;insert(Uri&nbsp;uri,&nbsp;ContentValues&nbsp;values)&nbsp;{<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;matcher.match(uri);<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;table&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(res)&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_SYS_UPDATE:<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;lacDBAccess.getWritableDatabase();<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"sys_update";<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IllegalArgumentException("insert()&nbsp;Unknown&nbsp;uri:&nbsp;"&nbsp;+&nbsp;uri);<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;rowid&nbsp;=&nbsp;db.insert(table,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;values);<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ContentUris.withAppendedId(uri,&nbsp;rowid);<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Cursor&nbsp;query(Uri&nbsp;uri,&nbsp;String[]&nbsp;projection,&nbsp;String&nbsp;selection,&nbsp;String[]&nbsp;selectionArgs,&nbsp;String&nbsp;sortOrder)&nbsp;{<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;matcher.match(uri);<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;table&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(res)&nbsp;{<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_EL_ESL:<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL:<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;elDBAccess.getReadableDatabase();<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"esl";<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_EL_ESL)&nbsp;{<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;"idx=?";&nbsp;&nbsp;<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selectionArgs&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String[]{String.valueOf(ContentUris.parseId(uri))};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_WORD_INFO:<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_LAC_WORD_INFO:<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;lacDBAccess.getReadableDatabase();<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"word_info";<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_LAC_WORD_INFO)&nbsp;{<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;"idx=?";&nbsp;&nbsp;<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selectionArgs&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String[]{String.valueOf(ContentUris.parseId(uri))};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_SYS_UPDATE:<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;lacDBAccess.getReadableDatabase();<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"sys_update";<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_DICT_INFO:<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;lacDBAccess.getReadableDatabase();<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"dict_info";<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_WORD_INDEX_JOIN_INFO:<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;lacDBAccess.getReadableDatabase();<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"word_index_100&nbsp;inner&nbsp;join&nbsp;word_info&nbsp;on&nbsp;(word_index_100.word_idx=word_info.idx)";<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_BLOCK_INFO:<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;lacDBAccess.getReadableDatabase();<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"block_info_100";<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br /><span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IllegalArgumentException("query()&nbsp;Unknown&nbsp;uri:&nbsp;"&nbsp;+&nbsp;uri);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;db.query(table,&nbsp;projection,&nbsp;selection,&nbsp;selectionArgs,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;sortOrder);<br /><span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">142</span>&nbsp;<br /><span style="color: #008080; ">143</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;update(Uri&nbsp;uri,&nbsp;ContentValues&nbsp;values,&nbsp;String&nbsp;selection,&nbsp;String[]&nbsp;selectionArgs)&nbsp;{<br /><span style="color: #008080; ">145</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;matcher.match(uri);<br /><span style="color: #008080; ">146</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;table&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">147</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(res)&nbsp;{<br /><span style="color: #008080; ">148</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_LAC_SYS_UPDATE:<br /><span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;lacDBAccess.getWritableDatabase();<br /><span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"sys_update";<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">152</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br /><span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IllegalArgumentException("update()&nbsp;Unknown&nbsp;uri:&nbsp;"&nbsp;+&nbsp;uri);<br /><span style="color: #008080; ">154</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;db.update(table,&nbsp;values,&nbsp;selection,&nbsp;selectionArgs);<br /><span style="color: #008080; ">156</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;delete(Uri&nbsp;uri,&nbsp;String&nbsp;selection,&nbsp;String[]&nbsp;selectionArgs)&nbsp;{<br /><span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IllegalArgumentException("delete()&nbsp;Unknown&nbsp;uri:&nbsp;"&nbsp;+&nbsp;uri);<br /><span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initMatcher()&nbsp;{<br /><span style="color: #008080; ">164</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;UriMatcher(UriMatcher.NO_MATCH);<br /><span style="color: #008080; ">165</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">166</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"el/esl",&nbsp;MATCH_EL_ESL);<br /><span style="color: #008080; ">167</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"el/esl/#",&nbsp;MATCH_ITEM_EL_ESL);<br /><span style="color: #008080; ">168</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"<a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a>/word_info",&nbsp;MATCH_LAC_WORD_INFO);<br /><span style="color: #008080; ">169</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"<a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a>/word_info/#",&nbsp;MATCH_ITEM_LAC_WORD_INFO);<br /><span style="color: #008080; ">170</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"<a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a>/sys_update",&nbsp;MATCH_LAC_SYS_UPDATE);<br /><span style="color: #008080; ">171</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"<a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a>/dict_info",&nbsp;MATCH_LAC_DICT_INFO);<br /><span style="color: #008080; ">172</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"<a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a>/word_index_join_info",&nbsp;MATCH_LAC_WORD_INDEX_JOIN_INFO);<br /><span style="color: #008080; ">173</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.addURI(AUTHORITY,&nbsp;"<a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a>/block_info",&nbsp;MATCH_LAC_BLOCK_INFO);<br /><span style="color: #008080; ">174</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">175</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">176</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initDatabases()&nbsp;{<br /><span style="color: #008080; ">177</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">178</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkLACDatabase();<br /><span style="color: #008080; ">179</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">180</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;db&nbsp;=&nbsp;Environment.getExternalStorageDirectory()&nbsp;+&nbsp;ELDBAccess.DBFILE;<br /><span style="color: #008080; ">181</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elDBAccess&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ELDBAccess(<span style="color: #0000FF; ">this</span>.getContext(),&nbsp;db);<br /><span style="color: #008080; ">182</span>&nbsp;<br /><span style="color: #008080; ">183</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;getContext().getDatabasePath(LACDBAccess.DBFILE).getAbsolutePath();<br /><span style="color: #008080; ">184</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lacDBAccess&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;LACDBAccess(<span style="color: #0000FF; ">this</span>.getContext(),&nbsp;db);<br /><span style="color: #008080; ">185</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">186</span>&nbsp;<br /><span style="color: #008080; ">187</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;checkLACDatabase()&nbsp;{<br /><span style="color: #008080; ">188</span>&nbsp;<br /><span style="color: #008080; ">189</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;dbfile&nbsp;=&nbsp;getContext().getDatabasePath(LACDBAccess.DBFILE);<br /><span style="color: #008080; ">190</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!dbfile.exists())&nbsp;{<br /><span style="color: #008080; ">191</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;parent&nbsp;=&nbsp;dbfile.getParentFile();<br /><span style="color: #008080; ">192</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!parent.exists())&nbsp;{<br /><span style="color: #008080; ">193</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent.mkdirs();<br /><span style="color: #008080; ">194</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">195</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">196</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;input;<br /><span style="color: #008080; ">197</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">198</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;=&nbsp;getContext().getAssets().open("lac2.zip");<br /><span style="color: #008080; ">199</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AssetsHelper.UnzipTo(input,&nbsp;parent.getAbsolutePath(),&nbsp;<span style="color: #0000FF; ">null</span>);<br /><span style="color: #008080; ">200</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">201</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">202</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">203</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">204</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">205</span>&nbsp;}<br /><span style="color: #008080; ">206</span>&nbsp;</div><br />&nbsp; &nbsp; ContentProvider框架非常的方便,使用时只要简单填充具体的数据操作皆可;但也有人认为其接口定义的不够灵活,比如在query()接口中,<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;Cursor&nbsp;query(Uri&nbsp;uri,&nbsp;String[]&nbsp;projection,&nbsp;String&nbsp;selection,&nbsp;String[]&nbsp;selectionArgs,&nbsp;String&nbsp;sortOrder)</div><br />&nbsp; &nbsp; 只有selection,sortOrder参数,如果需要'group by'操作怎么办? 再直接点,怎么通过ContentProvider接口传入个自定义的sql语句呢,像rawQuery()? 实际这些都可以搞定的 -- &nbsp;ContentProvider就是个接口封装,最终的访问还是需要SQLiteDatabase对象来完成,那么只要SQLiteDatabase可以实现的功能,就有办法通过ContentProvider传给SQLiteDatabase. 咋说呢, 多想想如何利用那个URI呀....<img src ="http://www.cppblog.com/codejie/aggbug/202327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-04 00:29 <a href="http://www.cppblog.com/codejie/archive/2013/08/04/202327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LAC: Demo Dictionary v2 : extend the expiration again..</title><link>http://www.cppblog.com/codejie/archive/2013/07/16/201879.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 16 Jul 2013 14:29:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/07/16/201879.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/201879.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/07/16/201879.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/201879.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/201879.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 先不说废话,重新编译的包在这里,<a href="https://code.google.com/p/lingoshook/downloads/detail?name=DemoDictionaryOfLAC2.apk">需要你就点吧</a>...这次过期点设置在10/31/2013,到时还是希望各位能关注下LAC2...(首先要有..是不..唉,打脸!) 说明查看这里<a href="http://www.cppblog.com/codejie/archive/2013/02/13/197822.html">V1</a>,&nbsp;<a href="http://www.cppblog.com/codejie/archive/2013/04/06/199142.html">V2</a>.<br /><br />&nbsp; &nbsp; 这个Demo设置个超期,目的是为了促使自己赶紧敲完LAC2,实际我真的在敲,几乎每晚都在敲的(周末'法定'放假的哦...),也有所小成,不信看下图...<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lac2-1.png" border="0" alt="" width="288" height="480" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lac2-2.png" border="0" alt="" width="288" height="480" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lac2-3.png" border="0" alt="" width="288" height="480" /><br /><br />&nbsp; &nbsp; <br />&nbsp; &nbsp; 但,某天公交上正听着ESL,看着&lt;蜀山剑侠传&gt;时,忽然就那么一闪(不是闪腰了..) -- 为啥不将ESL和LAC合并起来做个应用呢?这样既可以看其文本,又可以实时查询不认识的单词.&nbsp;说干就干,所以啊...LAC2就停了...实在不好意思啊...<br /><br />&nbsp; &nbsp; 尽量一个月内搞定这个EL,然后再LAC2. 不过LAC2可能还有晚点敲,因为我打算试试能不能靠EL把下半年和明年的点卡赚出来..(私房钱难存啊,LingosHook的捐赠早被败光了...)所以估计要连续改几个版本才行...<br />&nbsp; &nbsp; 目前EL还不是个样子...<br />&nbsp; &nbsp;<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/el-1.png" border="0" alt="" width="288" height="480" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/el-2.png" border="0" alt="" width="288" height="480" /><br /><br /><br /><br /><br />&lt;----- 想不起的分割线 -----&gt;<br />&nbsp; &nbsp; 基本每天都会来看看这里,或者回复下吐槽,或者发个帖子吐槽...今天突然发现竟然又快整整一个月一篇未发,堕落啊...<br />&nbsp; &nbsp; 可能是白天工作忙,晚上敲字忙,又没人来吐槽,也就懒了...今天算交代下近况---<strong>还喘气,能敲字</strong>...<br />&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp; 这半年天天java,敲的不亦乐乎,LingosHook的问题基本当不存在, 也导致经常问自己,是不是该直接<strong>转行去做android应用</strong>呢?唉,纠结的很...<img src ="http://www.cppblog.com/codejie/aggbug/201879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-07-16 22:29 <a href="http://www.cppblog.com/codejie/archive/2013/07/16/201879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android DEV : get AttributeSet from XML resource</title><link>http://www.cppblog.com/codejie/archive/2013/06/19/201137.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 18 Jun 2013 16:00:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/06/19/201137.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/201137.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/06/19/201137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/201137.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/201137.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; 这两天在练习个Android应用,需要创建一些自定义的View,实际每个View都是很简单的封装或者继承,但每个的Attribute都要一一配置,很是麻烦.<br />
&nbsp; &nbsp; 写一半时,忽然想起,这些Attributes都是可以从XML资源文件加载的啊...土了一把,赶紧删了全部代码,重写了...(又土了一把...)<br />
<br />
&nbsp; &nbsp; 虽然很早就知道这个,但却从来没写过,错了无数次,终于发现问题了,于是封装个Utils方法,供以后调用...<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;AttributeSet&nbsp;getAttributeSet(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;className,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resId)&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlResourceParser&nbsp;p&nbsp;=&nbsp;context.getResources().getXml(resId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;state&nbsp;=&nbsp;XmlResourceParser.START_DOCUMENT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;=&nbsp;p.next();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(state&nbsp;==&nbsp;XmlResourceParser.START_TAG)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(p.getName().equals(className))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Xml.asAttributeSet(p);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(XmlPullParserException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(state&nbsp;!=&nbsp;XmlResourceParser.END_DOCUMENT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><br />&nbsp; &nbsp; 说明下啊,当前本人java代码仅作记录,不负责的...原因你懂的...强力建议大家吐槽...嘿嘿...<img src ="http://www.cppblog.com/codejie/aggbug/201137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-06-19 00:00 <a href="http://www.cppblog.com/codejie/archive/2013/06/19/201137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android DEV : Amazing Theme and Style</title><link>http://www.cppblog.com/codejie/archive/2013/05/10/200157.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Fri, 10 May 2013 06:37:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/05/10/200157.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/200157.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/05/10/200157.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/200157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/200157.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; 工作上需要动态改变app字体大小,而我的LAC也可能需要这个,于是半公半私地看起来...google了很多页面,越发觉得Theme和Style神奇了...<br />
<br />
&nbsp; &nbsp; 咱也讲不好,还是直接放上几段代码做记录吧...<br />
<br />
&nbsp; &nbsp; styles.xml<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><br />
<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="small_title_text"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textSize"</span><span style="color: #0000FF; ">&gt;</span>22sp<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textColor"</span><span style="color: #0000FF; ">&gt;</span>@color/color1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textStyle"</span><span style="color: #0000FF; ">&gt;</span>normal<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:paddingBottom"</span><span style="color: #0000FF; ">&gt;</span>5dip<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="small_body_text"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textSize"</span><span style="color: #0000FF; ">&gt;</span>16sp<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textColor"</span><span style="color: #0000FF; ">&gt;</span>@color/color1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textStyle"</span><span style="color: #0000FF; ">&gt;</span>normal<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:paddingBottom"</span><span style="color: #0000FF; ">&gt;</span>5dip<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="large_title_text"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textSize"</span><span style="color: #0000FF; ">&gt;</span>40sp<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textColor"</span><span style="color: #0000FF; ">&gt;</span>@color/color<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textStyle"</span><span style="color: #0000FF; ">&gt;</span>normal<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:paddingBottom"</span><span style="color: #0000FF; ">&gt;</span>5dip<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><br />
<br />
&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="large_body_text"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textSize"</span><span style="color: #0000FF; ">&gt;</span>20sp<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textColor"</span><span style="color: #0000FF; ">&gt;</span>@color/color<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:textStyle"</span><span style="color: #0000FF; ">&gt;</span>normal<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="android:paddingBottom"</span><span style="color: #0000FF; ">&gt;</span>5dip<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><br />
<br />
&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;Base&nbsp;application&nbsp;theme&nbsp;is&nbsp;the&nbsp;default&nbsp;theme.&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />
&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Theme"</span><span style="color: #FF0000; ">&nbsp;parent</span><span style="color: #0000FF; ">="android:Theme"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><br />
<br />
&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Theme.Small"</span><span style="color: #FF0000; ">&nbsp;parent</span><span style="color: #0000FF; ">="Theme"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="textTitle"</span><span style="color: #0000FF; ">&gt;</span>@style/small_title_text<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="textBody"</span><span style="color: #0000FF; ">&gt;</span>@style/small_body_text<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><br />
<br />
&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Theme.Large"</span><span style="color: #FF0000; ">&nbsp;&nbsp;parent</span><span style="color: #0000FF; ">="Theme"</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="textTitle"</span><span style="color: #0000FF; ">&gt;</span>@style/large_title_text<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">item&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="textBody"</span><span style="color: #0000FF; ">&gt;</span>@style/large_body_text<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">item</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span></div>
<br />&nbsp; &nbsp; attrs.xml<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">attr&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="textTitle"</span><span style="color: #FF0000; ">&nbsp;format</span><span style="color: #0000FF; ">="reference"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">attr&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="textBody"</span><span style="color: #FF0000; ">&nbsp;format</span><span style="color: #0000FF; ">="reference"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span></div><br />&nbsp; &nbsp; main.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">RelativeLayout&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tools</span><span style="color: #0000FF; ">="http://schemas.android.com/tools"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingBottom</span><span style="color: #0000FF; ">="@dimen/activity_vertical_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingLeft</span><span style="color: #0000FF; ">="@dimen/activity_horizontal_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingRight</span><span style="color: #0000FF; ">="@dimen/activity_horizontal_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingTop</span><span style="color: #0000FF; ">="@dimen/activity_vertical_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;tools:context</span><span style="color: #0000FF; ">=".MainActivity"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">TextView<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/textView1"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style</span><span style="color: #0000FF; ">="?textTitle"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_alignParentLeft</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_alignParentTop</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:text</span><span style="color: #0000FF; ">="@string/hello_world"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button1"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style</span><span style="color: #0000FF; ">="?textBody"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_alignLeft</span><span style="color: #0000FF; ">="@+id/textView1"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_below</span><span style="color: #0000FF; ">="@+id/textView1"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginTop</span><span style="color: #0000FF; ">="14dp"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:text</span><span style="color: #0000FF; ">="ToggleButton"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">RelativeLayout</span><span style="color: #0000FF; ">&gt;</span></div><br />&nbsp; &nbsp; main.java<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onButtonClick()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(toggle)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.setTheme(R.style.Theme_Large);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_main);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.setTheme(R.style.Theme_Small);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_main);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;btn&nbsp;=&nbsp;(Button)&nbsp;<span style="color: #0000FF; ">this</span>.findViewById(R.id.button1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.setOnClickListener(<span style="color: #0000FF; ">new</span>&nbsp;OnClickListener()&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onClick(View&nbsp;arg0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onButtonClick();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toggle&nbsp;=&nbsp;!toggle;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><br />file://C:\Program Files\sdk\platforms\android-17\data\res<span style="font-size: 11px;"><br /></span><a href="http://developer.android.com/guide/topics/ui/themes.html">http://developer.android.com/guide/topics/ui/themes.html</a><span style="font-size: 11px;"><br /></span><a href="http://stackoverflow.com/questions/3241729/android-dynamically-change-style-at-runtime">http://stackoverflow.com/questions/3241729/android-dynamically-change-style-at-runtime</a><br /><br /><img src ="http://www.cppblog.com/codejie/aggbug/200157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-05-10 14:37 <a href="http://www.cppblog.com/codejie/archive/2013/05/10/200157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LAC: Lingoes.XSL</title><link>http://www.cppblog.com/codejie/archive/2013/04/03/199083.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 03 Apr 2013 15:43:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/04/03/199083.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/199083.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/04/03/199083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/199083.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/199083.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 这两天晚上在忙着修改LAC的Navite Dictionary演示程序,添加对多词典的支持;一来可以为后面LAC2的开发积累点经验,二来,也是主要原因是下个月我自己可能要用到...唉,自己敲的app,实际自己使用的时间不如敲打时间的百分之一...<br /><br />&nbsp; &nbsp; 这次支持了中文Vicon词典,敲字过程中碰到曾经没有考虑到很多问题,卡了我很多天.目前看除了那个DES加密破解不了外,像字符集编码,XML输出什么的都还能搞定,应该可以拿到LAC2中直接用了.当然那个cursor.MoveToFirst()死慢的问题估计需要到时重新设计下数据库表来解决了...<br /><br />&nbsp; &nbsp; 今天记录下对XSL的认识,唉,XML认识了那么久,从来没有好好静心研究过,这次算碰到钉子了...也好,搞明白了这个,在也不用自己分解XML再拼串输出了...不论对不对,贴上再说...(只是个draft,就给我自己看的..)<br /><br />&nbsp; &nbsp; 更新下,来张图先,使用xslt输出xml还是很cool的啊..(这单词代表我的心...)<br /><br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lac-xslt.png" /><br /><br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:stylesheet&nbsp;</span><span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span><span style="color: #ff0000">&nbsp;xmlns:xsl</span><span style="color: #0000ff">="http://www.w3.org/1999/XSL/Transform"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:output&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">='html'&nbsp;</span><span style="color: #ff0000">version</span><span style="color: #0000ff">='1.0'&nbsp;</span><span style="color: #ff0000">encoding</span><span style="color: #0000ff">='UTF-8'&nbsp;</span><span style="color: #ff0000">indent</span><span style="color: #0000ff">='yes'/&gt;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #ff0000">&lt;xsl:template&nbsp;match</span><span style="color: #0000ff">="<a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a>"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:apply-templates</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="W"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">SPAN&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="LINE-HEIGHT:&nbsp;150%;&nbsp;COLOR:&nbsp;#000000;&nbsp;FONT-SIZE:&nbsp;180%"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">B</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:value-of&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">B</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">SPAN</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="D"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DIV&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="LINE-HEIGHT:&nbsp;120%;&nbsp;background-color:#cfddf0;&nbsp;COLOR:#000080;&nbsp;FONT-SIZE:&nbsp;100%"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">B</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:value-of&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">B</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="C"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:for-each&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="F"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DIV&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="MARGIN:&nbsp;5px&nbsp;0px"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:apply-templates</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:for-each</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="E"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DIV&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="MARGIN:&nbsp;4px&nbsp;0px;&nbsp;LINE-HEIGHT:&nbsp;150%;&nbsp;FONT-SIZE:&nbsp;100%"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">B</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Extension:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">B</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FONT&nbsp;</span><span style="color: #ff0000">COLOR</span><span style="color: #0000ff">="#229922"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:for-each&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="E"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:value-of&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:for-each</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FONT</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:if</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="H"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">SPAN&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="LINE-HEIGHT:&nbsp;120%;&nbsp;COLOR:&nbsp;#000000;&nbsp;FONT-SIZE:&nbsp;120%"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:apply-templates</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">SPAN</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="L"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DIV&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="MARGIN:&nbsp;0px&nbsp;0px&nbsp;5px;&nbsp;"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:value-of&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="M"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;[</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FONT&nbsp;</span><span style="color: #ff0000">COLOR</span><span style="color: #0000ff">="#009900"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:value-of&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FONT</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">]<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="I"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DIV&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="MARGIN:&nbsp;0px&nbsp;0px&nbsp;5px"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:apply-templates</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="N"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DIV&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="MARGIN:&nbsp;4px&nbsp;0px;&nbsp;LINE-HEIGHT:&nbsp;120%;&nbsp;FONT-SIZE:&nbsp;120%"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:apply-templates</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DIV</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="U"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FONT&nbsp;</span><span style="color: #ff0000">color</span><span style="color: #0000ff">="#c00000"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:value-of&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FONT</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="x"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:apply-templates</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:template&nbsp;</span><span style="color: #ff0000">match</span><span style="color: #0000ff">="h"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">I</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xsl:value-of&nbsp;</span><span style="color: #ff0000">select</span><span style="color: #0000ff">="."</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">I</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xsl:stylesheet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span></div><img src ="http://www.cppblog.com/codejie/aggbug/199083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-04-03 23:43 <a href="http://www.cppblog.com/codejie/archive/2013/04/03/199083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android ROM : Enable to debug with DDMS</title><link>http://www.cppblog.com/codejie/archive/2013/02/01/197672.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Fri, 01 Feb 2013 15:13:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/02/01/197672.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/197672.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/02/01/197672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/197672.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/197672.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp; 前天终于把G7归于名下,耐不住诱惑,直接刷到4.1.2了,感觉不错...&nbsp; &nbsp; 调试中,发现个问题 -- 在DDMS中没法使用File Explorer查看内容...这不是要命吗?咱就要用这个提取数据啊...&nbsp; &nbsp; 于是,研究发现,ROM安装脚本中恨有玄机啊...Code highlighting prod...&nbsp;&nbsp;<a href='http://www.cppblog.com/codejie/archive/2013/02/01/197672.html'>阅读全文</a><img src ="http://www.cppblog.com/codejie/aggbug/197672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-02-01 23:13 <a href="http://www.cppblog.com/codejie/archive/2013/02/01/197672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轮子精神 : CursorRefreshAdapter</title><link>http://www.cppblog.com/codejie/archive/2012/09/18/191173.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 18 Sep 2012 15:35:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2012/09/18/191173.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/191173.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2012/09/18/191173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/191173.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/191173.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; 为配合<a href="http://www.cppblog.com/codejie/archive/2012/09/14/190565.html">RefreshListView</a>,还需要对应的Adapter,测试代码如下:<br />
<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_233530" onclick="this.style.display='none'; Code_Closed_Text_233530.style.display='none'; Code_Open_Image_233530.style.display='inline'; Code_Open_Text_233530.style.display='inline';" height="16" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_233530" style="display: none" onclick="this.style.display='none'; Code_Open_Text_233530.style.display='none'; Code_Closed_Image_233530.style.display='inline'; Code_Closed_Text_233530.style.display='inline';" height="16" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_233530" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">CursorRefreshAdapter</span><span id="Code_Open_Text_233530" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;jie.java.android.test_listview;<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.util.ArrayList;<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.Context;<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.database.Cursor;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.LayoutInflater;<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.View;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.ViewGroup;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.BaseAdapter;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.TextView;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;CursorRefreshAdapter&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;BaseAdapter&nbsp;{<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;ArrayList&lt;DBAccess.Data&gt;&nbsp;array&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ArrayList&lt;DBAccess.Data&gt;();<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Context&nbsp;context&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;DBAccess&nbsp;db&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Cursor&nbsp;cursor&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maxRows&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;offset&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;condition&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;CursorRefreshAdapter(Context&nbsp;context,&nbsp;DBAccess&nbsp;db)&nbsp;{<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.context&nbsp;=&nbsp;context;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.db&nbsp;=&nbsp;db;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;finalize()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Throwable&nbsp;{<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(cursor&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor.close();<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.finalize();<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getCount()&nbsp;{<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;array.size();<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Object&nbsp;getItem(<span style="color: #0000FF; ">int</span>&nbsp;index)&nbsp;{<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;array.get(index);<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getItemId(<span style="color: #0000FF; ">int</span>&nbsp;index)&nbsp;{<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;View&nbsp;getView(<span style="color: #0000FF; ">int</span>&nbsp;position,&nbsp;View&nbsp;convertView,&nbsp;ViewGroup&nbsp;parent)&nbsp;{<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(convertView&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertView&nbsp;=&nbsp;LayoutInflater.from(<span style="color: #0000FF; ">this</span>.context).inflate(android.R.layout.simple_list_item_2,&nbsp;parent,&nbsp;<span style="color: #0000FF; ">false</span>);<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextView&nbsp;v1&nbsp;=&nbsp;(TextView)&nbsp;convertView.findViewById(android.R.id.text1);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1.setText(Integer.toString(array.get(position).id));<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1&nbsp;=&nbsp;(TextView)&nbsp;convertView.findViewById(android.R.id.text2);<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1.setText(array.get(position).value);<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;convertView;<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setMaxRows(<span style="color: #0000FF; ">int</span>&nbsp;max)&nbsp;{<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxRows&nbsp;=&nbsp;max;<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;load(<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;condition)&nbsp;{<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(cursor&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor.close();<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.condition&nbsp;=&nbsp;condition;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;refresh();<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;refresh()&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor&nbsp;=&nbsp;db.getValue(<span style="color: #0000FF; ">this</span>.condition,&nbsp;offset,&nbsp;maxRows);<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(cursor&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!cursor.moveToFirst())<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cursor.moveToNext())&nbsp;{<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array.add(<span style="color: #0000FF; ">new</span>&nbsp;DBAccess.Data(cursor.getInt(0),&nbsp;cursor.getString(1)));<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;+=&nbsp;cursor.getCount();<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.notifyDataSetChanged();<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;offset;<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">101</span>&nbsp;}<br /><span style="color: #008080; ">102</span>&nbsp;</span></div>
<br />
&nbsp; &nbsp; 再一次被如下错误撂倒...<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->java.lang.UnsupportedOperationException:&nbsp;addView(View,&nbsp;LayoutParams)&nbsp;is&nbsp;not&nbsp;supported&nbsp;in&nbsp;AdapterView</div>
<br />
&nbsp; &nbsp; 解决方法还是如下:<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->v&nbsp;=&nbsp;vi.inflate(R.layout.items_row,&nbsp;p);<br />
<br />
Add&nbsp;a&nbsp;<span style="color: #0000FF; ">false</span>&nbsp;third&nbsp;parameter&nbsp;to&nbsp;that&nbsp;call,&nbsp;and&nbsp;I&nbsp;think&nbsp;your&nbsp;problem&nbsp;will&nbsp;go&nbsp;away.&nbsp;The&nbsp;call&nbsp;should&nbsp;become:<br />
v&nbsp;=&nbsp;vi.inflate(R.layout.items_row,&nbsp;p,&nbsp;<span style="color: #0000FF; ">false</span>);</div>
<br />
&nbsp; &nbsp; 原始链接如下:<br />
<a href="http://stackoverflow.com/questions/2496698/android-custom-listadapter-extending-baseadapter-crashes-on-application-launch">http://stackoverflow.com/questions/2496698/android-custom-listadapter-extending-baseadapter-crashes-on-application-launch</a><br />
<br />
&nbsp; &nbsp; 唉,记忆力严重衰退啊...<br /><br />&nbsp; &nbsp; 另,近来比较忙,现在看来--LAC新版年底能出来就不错了...唉...困死了,睡觉去了...<img src ="http://www.cppblog.com/codejie/aggbug/191173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2012-09-18 23:35 <a href="http://www.cppblog.com/codejie/archive/2012/09/18/191173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轮子精神 : RefreshListView</title><link>http://www.cppblog.com/codejie/archive/2012/09/14/190565.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Thu, 13 Sep 2012 16:04:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2012/09/14/190565.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/190565.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2012/09/14/190565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/190565.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/190565.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp; 新的LAC设想中需要一个类似IOS中的'Pull to Refresh ListView'功能,即是当ListView显示到最后一列时,向上拖动ListView将开始加载后续数据列,如下图所示:&nbsp; &nbsp;&nbsp; &nbsp; 一直以为Android应该自带了这个view,但翻了一下,竟然没有,至少API8中没有...赶紧google下,嗯,很多前人...&nbsp;&nbsp;<a href='http://www.cppblog.com/codejie/archive/2012/09/14/190565.html'>阅读全文</a><img src ="http://www.cppblog.com/codejie/aggbug/190565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2012-09-14 00:04 <a href="http://www.cppblog.com/codejie/archive/2012/09/14/190565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LAC : Example Database  is ready</title><link>http://www.cppblog.com/codejie/archive/2012/07/20/184255.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Thu, 19 Jul 2012 16:10:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2012/07/20/184255.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/184255.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2012/07/20/184255.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/184255.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/184255.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; <a href="http://www.cppblog.com/codejie/archive/2012/02/01/164729.html">LAC</a>所需的database实例终于搞好了...<br />&nbsp; &nbsp; 为了这个实例,还特意用C++写了个分析程序 -- Txt2Html.自动解析加上人眼检查,还是搞定了!整整5个晚上啊...才几天没用C++啊,竟然忘记mutable这个关键字了...<br />&nbsp; &nbsp; 如果不再被我测出新bug,或者想起新功能,LAC再改动一些字符串什么的,应该可以release了! 先上图,剧透下,也展示一下今晚database的成果.<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lac_w_list.png" border="0" alt="" width="181" height="280" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lac_html.png" border="0" alt="" width="182" height="284" /><br /><br />&nbsp; &nbsp; 喜欢不...这只是LAC的'冰山一角'噢...哇哈哈...<img src ="http://www.cppblog.com/codejie/aggbug/184255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2012-07-20 00:10 <a href="http://www.cppblog.com/codejie/archive/2012/07/20/184255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SavingKeeper: Release Three</title><link>http://www.cppblog.com/codejie/archive/2012/06/06/177808.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 06 Jun 2012 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2012/06/06/177808.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/177808.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2012/06/06/177808.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/177808.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/177808.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; 不知道大家还记得<a href="http://www.cppblog.com/codejie/archive/2011/11/07/159521.html">SavignKeeper</a>不。。。<br />
&nbsp; &nbsp; 本来我都快忘记了，结果上两周了吧，LP突然说，怎么没有个下期金额呢。。。啥？！啊，你还在用啊。。。<br />
&nbsp; &nbsp; 好吧，有需求就有update。。。<br />
&nbsp; &nbsp; 1. 增加显示到期定期存单下次到期时的金额；（拗口啊。。）<br />
&nbsp; &nbsp; 2. 修正Date类型变量Bugs；（这Bug错的离谱啊。。。第一次使用Date.clone()，以前竟然不知道怎么拷贝赋值。。果然还是不会java。。）<br />
<br />
&nbsp; &nbsp; 上图了，还有跟LP一样&#8216;顽固&#8217;的使用者吗？请这里<a href="http://code.google.com/p/codejie/downloads/detail?name=SavingKeeper_r3.apk&amp;can=2&amp;q=">下载更新</a>。。。辛苦了。。。<br />
<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/SavingKeeper/sk_1.png" border="0" alt="" /><br /><img src ="http://www.cppblog.com/codejie/aggbug/177808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2012-06-06 17:04 <a href="http://www.cppblog.com/codejie/archive/2012/06/06/177808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LIBGDX: New Face</title><link>http://www.cppblog.com/codejie/archive/2012/02/15/165604.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 14 Feb 2012 16:23:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2012/02/15/165604.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/165604.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2012/02/15/165604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/165604.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/165604.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 半年没关注libgdx的后果是－－完全不认识了。。。<br />&nbsp; &nbsp; 刚update了libgdx最新source，想用下Image的，记得原来是在actors下面的，source中找了半天，发现不仅Image不见了，连actors目录也没了。。。整个人震惊了－－难道这些基础元素都是自己从actor下面继承实现不成？<br />&nbsp; &nbsp; 继续翻啊翻，这才发现，libgdx不仅没有删除Image，还创建了更多的actors，只不过现在都叫做Widget，统一放在ui目录下面了。。。<br /><br />&nbsp; &nbsp; 现在完蛋了，本来libgdx就了解个皮毛，现在毛都没了，估计又得从头研究起了。。。。libgdx，you are a new face for me...<img src ="http://www.cppblog.com/codejie/aggbug/165604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2012-02-15 00:23 <a href="http://www.cppblog.com/codejie/archive/2012/02/15/165604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LingosHook : Android Client</title><link>http://www.cppblog.com/codejie/archive/2011/12/21/162541.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 21 Dec 2011 08:37:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2011/12/21/162541.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/162541.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2011/12/21/162541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/162541.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/162541.html</trackback:ping><description><![CDATA[<br />&nbsp;&nbsp;&nbsp; LingosHook很久很久没有更新了，主要是还在纠结哪个功能需要先实现。。。纠结的结果是－－都不做了。。。<br />&nbsp;&nbsp;&nbsp; 是的,这个回答非常的不负责任，于是为了安抚内心的不安，开始着手敲一个LingosHook的辅助工具应用 －－ <a title="LingosHook" href="www.cppblog.com/codejie">LingosHook</a> Android Client。<br />&nbsp;&nbsp;&nbsp; 刚开始写，也别有太高想法，此应用只是将LingosHook的一个功能移植到Android上，下面是已实现的两个界面，算是剧透了。。。<br /><br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lhac_main..png" width="484" height="809" /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/codejie/LingosHookAndroidClient/lhac_word..png" /><br /><br /><br />&lt;---- 恐惧的分割线 ----&gt;<br /><br />&nbsp;&nbsp;&nbsp; 又要开始没日没夜的敲字时光，然后是无尽的维护，无尽的纠结，唉，想想都害怕。。。。<br /><br /><img src ="http://www.cppblog.com/codejie/aggbug/162541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2011-12-21 16:37 <a href="http://www.cppblog.com/codejie/archive/2011/12/21/162541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>G7 : Paint View</title><link>http://www.cppblog.com/codejie/archive/2011/11/25/160971.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Fri, 25 Nov 2011 07:09:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2011/11/25/160971.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/160971.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2011/11/25/160971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/160971.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/160971.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;jie.android.java.test.drawtest;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;android.content.Context;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.graphics.Bitmap;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.graphics.Canvas;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.graphics.EmbossMaskFilter;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.graphics.Paint;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.graphics.Path;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.view.MotionEvent;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.view.View;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;DrawView&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;View&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Bitmap&nbsp;bitmap;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Canvas&nbsp;canvas;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Path&nbsp;path;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Paint&nbsp;paint;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Paint&nbsp;mPaint;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;mX,&nbsp;mY;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;DrawView(Context&nbsp;context)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>(context);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;constructor&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Paint();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setAntiAlias(<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setDither(<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setColor(0x88FF0000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setStyle(Paint.Style.STROKE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setStrokeJoin(Paint.Join.ROUND);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setStrokeCap(Paint.Cap.ROUND);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setStrokeWidth(12);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mPaint.setMaskFilter(<span style="color: #0000FF; ">new</span>&nbsp;EmbossMaskFilter(<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">float</span>[]&nbsp;{&nbsp;1,&nbsp;1,&nbsp;1&nbsp;},0.4f,&nbsp;6,&nbsp;3.5f));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Path();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paint&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Paint(Paint.DITHER_FLAG);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onDraw(Canvas&nbsp;canvas)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.drawColor(0xFFFFFFFF);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.drawBitmap(bitmap,&nbsp;0,&nbsp;0,&nbsp;paint);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.drawPath(path,&nbsp;mPaint);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.onDraw(canvas);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onSizeChanged(<span style="color: #0000FF; ">int</span>&nbsp;w,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;h,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;oldw,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;oldh)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bitmap&nbsp;=&nbsp;Bitmap.createBitmap(w,&nbsp;h,&nbsp;Bitmap.Config.ARGB_8888);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Canvas(bitmap);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.onSizeChanged(w,&nbsp;h,&nbsp;oldw,&nbsp;oldh);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onTouchEvent(MotionEvent&nbsp;event)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;x&nbsp;=&nbsp;event.getX();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;y&nbsp;=&nbsp;event.getY();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>(event.getAction())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MotionEvent.ACTION_DOWN:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;touchStart(x,&nbsp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invalidate();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MotionEvent.ACTION_MOVE:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;touchMove(x,&nbsp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invalidate();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MotionEvent.ACTION_UP:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;touchUp();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invalidate();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<span style="color: #008000; ">//</span><span style="color: #008000; ">super.onTouchEvent(event);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;touchStart(<span style="color: #0000FF; ">float</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;y)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path.reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path.moveTo(x,&nbsp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mX&nbsp;=&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mY&nbsp;=&nbsp;y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;touchMove(<span style="color: #0000FF; ">float</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;y)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;dx&nbsp;=&nbsp;Math.abs(x&nbsp;-&nbsp;mX);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;dy&nbsp;=&nbsp;Math.abs(y&nbsp;-&nbsp;mY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dx&nbsp;&gt;=&nbsp;4&nbsp;||&nbsp;dy&nbsp;&gt;=&nbsp;4)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path.quadTo(mX,&nbsp;mY,&nbsp;(x&nbsp;+&nbsp;mX)/2,&nbsp;(y&nbsp;+&nbsp;mY)/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mX&nbsp;=&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mY&nbsp;=&nbsp;y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;touchUp()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path.lineTo(mX,&nbsp;mY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.drawPath(path,&nbsp;mPaint);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><img src ="http://www.cppblog.com/codejie/aggbug/160971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2011-11-25 15:09 <a href="http://www.cppblog.com/codejie/archive/2011/11/25/160971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SavingKeeper : 增加导入导出功能</title><link>http://www.cppblog.com/codejie/archive/2011/11/24/160880.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Thu, 24 Nov 2011 03:17:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2011/11/24/160880.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/160880.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2011/11/24/160880.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/160880.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/160880.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; 前两天做测试，重新加载了SavingKeeper，结果导致所有的输入数据都丢失了，这才想起，安装同版本的程序时，会先卸载原来的，也就导致了数据的丢失，这真是个麻烦问题。<br />
&nbsp; &nbsp; 于是SavingKeeper添加了导入、导出功能。新的版本可以这里<a href="http://code.google.com/p/codejie/downloads/detail?name=SavingKeeper_r2.apk&amp;can=2&amp;q=">下载</a>；<br />
<br />
&nbsp; &nbsp; 上图了。<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/SavingKeeper/saving_ei1.png" border="0" alt="" width="487" height="763" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/SavingKeeper/saving_ei2.png" border="0" alt="" width="487" height="763" /><br /><br /><br />&nbsp; &nbsp; 两种导入的区别在于&#8216;比较导入&#8217;是在导入时检查是否同&#8216;标题&#8217;的项目已经存在，存在的就不再导入了；而&#8216;覆盖导入&#8217;则是先删除当前全部项目，重新导入文件中的。<br /><br />&nbsp; &nbsp; 下面是导入导出文件格式例子。导入导出功能的另一个好处就是，如果嫌在android上输入麻烦，可以先在电脑上写好这个xml文件，然后一次导入进去。（狠合适我这种手指头比较不灵活的人。。。）<span style="background-color: #eeeeee; font-size: 13px; color: #0000ff; ">&lt;?</span><span style="background-color: #eeeeee; font-size: 13px; color: #ff00ff; ">xml&nbsp;version='1.0'&nbsp;encoding='utf-8'&nbsp;standalone='no'</span><span style="background-color: #eeeeee; font-size: 13px; color: #0000ff; ">?&gt;</span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">SavingKeeper&nbsp;</span><span style="color: #FF0000; ">version</span><span style="color: #0000FF; ">="1"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Saving</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Item&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="7"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Title</span><span style="color: #0000FF; ">&gt;</span>111<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Title</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Amount</span><span style="color: #0000FF; ">&gt;</span>10<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Amount</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Currency</span><span style="color: #0000FF; ">&gt;</span>0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Currency</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Checkin</span><span style="color: #0000FF; ">&gt;</span>2011.11.23<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Checkin</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Type</span><span style="color: #0000FF; ">&gt;</span>0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Type</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Bank</span><span style="color: #0000FF; ">&gt;</span>1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Bank</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Note</span><span style="color: #0000FF; ">&gt;</span>333<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Note</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Item</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Item&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="8"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Title</span><span style="color: #0000FF; ">&gt;</span>1112<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Title</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Amount</span><span style="color: #0000FF; ">&gt;</span>10<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Amount</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Currency</span><span style="color: #0000FF; ">&gt;</span>0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Currency</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Checkin</span><span style="color: #0000FF; ">&gt;</span>2011.11.23<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Checkin</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Type</span><span style="color: #0000FF; ">&gt;</span>0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Type</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Bank</span><span style="color: #0000FF; ">&gt;</span>1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Bank</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Note</span><span style="color: #0000FF; ">&gt;</span>333<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Note</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Item</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Saving</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">SavingKeeper</span><span style="color: #0000FF; ">&gt;</span></div><br /><br /><img src ="http://www.cppblog.com/codejie/aggbug/160880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2011-11-24 11:17 <a href="http://www.cppblog.com/codejie/archive/2011/11/24/160880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>G7 : Xml File Process</title><link>http://www.cppblog.com/codejie/archive/2011/11/15/160178.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 15 Nov 2011 09:13:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2011/11/15/160178.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/160178.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2011/11/15/160178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/160178.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/160178.html</trackback:ping><description><![CDATA[<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;jie.java.android.xmlfiletest;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.File;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileInputStream;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileNotFoundException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileOutputStream;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.xmlpull.v1.XmlPullParser;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.xmlpull.v1.XmlPullParserException;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.xmlpull.v1.XmlPullParserFactory;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.xmlpull.v1.XmlSerializer;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;android.app.Activity;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.os.Bundle;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.os.Environment;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.util.Log;<br /><span style="color: #0000FF; ">import</span>&nbsp;android.util.Xml;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;XmlFileTestActivity&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;Activity&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Called&nbsp;when&nbsp;the&nbsp;activity&nbsp;is&nbsp;first&nbsp;created.&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.onCreate(savedInstanceState);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.main);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeXmlFile();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readXmlFile();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;writeXmlFile()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("xml",&nbsp;"mounted");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("xml",&nbsp;"not&nbsp;mount.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;File(Environment.getExternalStorageDirectory(),&nbsp;"my.xml");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.createNewFile();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e("xml",&nbsp;"file.createNewFile()&nbsp;exception."&nbsp;+&nbsp;e.getMessage());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;os&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;FileOutputStream(file);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(FileNotFoundException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e("xml",&nbsp;"FileOutputStream&nbsp;exception.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlSerializer&nbsp;serializer&nbsp;=&nbsp;Xml.newSerializer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.setOutput(os,&nbsp;"UTF-8");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.startDocument(<span style="color: #0000FF; ">null</span>,&nbsp;<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.startTag(<span style="color: #0000FF; ">null</span>,&nbsp;"root");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.attribute(<span style="color: #0000FF; ">null</span>,&nbsp;"attr",&nbsp;"123");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.text("hello");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.endTag(<span style="color: #0000FF; ">null</span>,&nbsp;"root");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.endDocument();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.flush();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e("xml",&nbsp;"serializer&nbsp;exception.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;readXmlFile()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;File(Environment.getExternalStorageDirectory(),&nbsp;"my.xml");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlPullParserFactory&nbsp;factory&nbsp;=&nbsp;XmlPullParserFactory.newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.setNamespaceAware(<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlPullParser&nbsp;xp&nbsp;=&nbsp;factory.newPullParser();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;is&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;FileInputStream(file);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xp.setInput(is,&nbsp;"UTF-8");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;type&nbsp;=&nbsp;xp.getEventType();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(type&nbsp;!=&nbsp;XmlPullParser.END_DOCUMENT)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(type&nbsp;==&nbsp;XmlPullParser.START_DOCUMENT)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(type&nbsp;==&nbsp;XmlPullParser.START_TAG)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("xml",&nbsp;"start&nbsp;tag:"&nbsp;+&nbsp;xp.getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("xml",&nbsp;"attr:&nbsp;"&nbsp;+&nbsp;xp.getAttributeName(0)&nbsp;+&nbsp;"&nbsp;value:"&nbsp;+&nbsp;xp.getAttributeValue(0));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(type&nbsp;==&nbsp;XmlPullParser.TEXT)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("xml",&nbsp;"text:"&nbsp;+&nbsp;xp.getText());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;=&nbsp;xp.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(XmlPullParserException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><img src ="http://www.cppblog.com/codejie/aggbug/160178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2011-11-15 17:13 <a href="http://www.cppblog.com/codejie/archive/2011/11/15/160178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>G7 : Use TouchEvent</title><link>http://www.cppblog.com/codejie/archive/2011/11/14/160093.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Mon, 14 Nov 2011 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2011/11/14/160093.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/160093.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2011/11/14/160093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/160093.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/160093.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;jie.java.android.touchmovetest;<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.app.Activity;<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.os.Bundle;<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.util.Log;<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.GestureDetector;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.GestureDetector.SimpleOnGestureListener;<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.MotionEvent;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.View;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.View.OnTouchListener;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;TouchMoveTestActivity&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;Activity&nbsp;&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;OnTouchListener&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Called&nbsp;when&nbsp;the&nbsp;activity&nbsp;is&nbsp;first&nbsp;created.&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MyGestureListener&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;SimpleOnGestureListener&nbsp;{<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onDoubleTap(MotionEvent&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"doubletap");<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">super</span>.onDoubleTap(e);<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onDoubleTapEvent(MotionEvent&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"doubletapevent");<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">super</span>.onDoubleTapEvent(e);<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onDown(MotionEvent&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"down");<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">super</span>.onDown(e);<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onFling(MotionEvent&nbsp;e1,&nbsp;MotionEvent&nbsp;e2,&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;velocityX,<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;velocityY)&nbsp;{<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"filing&nbsp;-&nbsp;e1.x:"&nbsp;+&nbsp;e1.getX()&nbsp;+&nbsp;"&nbsp;e2.x:"&nbsp;+&nbsp;e2.getX()&nbsp;+&nbsp;"&nbsp;vx:"&nbsp;+&nbsp;velocityX);<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">super</span>.onFling(e1,&nbsp;e2,&nbsp;velocityX,&nbsp;velocityY);<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onLongPress(MotionEvent&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"longpress");<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.onLongPress(e);<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onScroll(MotionEvent&nbsp;e1,&nbsp;MotionEvent&nbsp;e2,<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;distanceX,&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;distanceY)&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"scroll&nbsp;-&nbsp;e1.x:"&nbsp;+&nbsp;e1.getX()&nbsp;+&nbsp;"&nbsp;e2.x:"&nbsp;+&nbsp;e2.getX()&nbsp;+&nbsp;"&nbsp;distx:"&nbsp;+&nbsp;distanceX);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">super</span>.onScroll(e1,&nbsp;e2,&nbsp;distanceX,&nbsp;distanceY);<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onShowPress(MotionEvent&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"showpress");<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.onShowPress(e);<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onSingleTapConfirmed(MotionEvent&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"singletapconfirmed");<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">super</span>.onSingleTapConfirmed(e);<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onSingleTapUp(MotionEvent&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("g",&nbsp;"singletapup");<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">super</span>.onSingleTapUp(e);<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;GestureDetector&nbsp;detector&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.onCreate(savedInstanceState);<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.main);<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.findViewById(R.id.linearLayout1).setOnTouchListener(<span style="color: #0000FF; ">this</span>);<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.findViewById(R.id.linearLayout1).setLongClickable(<span style="color: #0000FF; ">true</span>);<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;detector&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;GestureDetector(<span style="color: #0000FF; ">this</span>,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MyGestureListener());<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onTouch(View&nbsp;view,&nbsp;MotionEvent&nbsp;event)&nbsp;{<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;detector.onTouchEvent(event);<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">101</span>&nbsp;}</div><img src ="http://www.cppblog.com/codejie/aggbug/160093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2011-11-14 16:58 <a href="http://www.cppblog.com/codejie/archive/2011/11/14/160093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SavingKeeper : 增加缺省数据恢复菜单</title><link>http://www.cppblog.com/codejie/archive/2011/11/11/159964.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Fri, 11 Nov 2011 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2011/11/11/159964.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/159964.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2011/11/11/159964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/159964.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/159964.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 昨天自己用的时候，发现很多Bugs和不方便的地方，做些修改，新版本<a href="http://code.google.com/p/codejie/downloads/detail?name=SavingKeeper_r1_fix4.apk&amp;can=2&amp;q=">这里下载</a>。<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; 1. 修改存单编辑中的日期和银行错误；<br />&nbsp; &nbsp; &nbsp; &nbsp; 2. 增加恢复缺省银行列表菜单及功能；<br />&nbsp; &nbsp; &nbsp; &nbsp; 3. 增加恢复缺省利息列表菜单及功能；<br /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/SavingKeeper/saving_rate5.png" border="0" alt="" width="473" height="757" /><img src ="http://www.cppblog.com/codejie/aggbug/159964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2011-11-11 16:49 <a href="http://www.cppblog.com/codejie/archive/2011/11/11/159964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>