如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效,
事件会被子View捕获到,ListView无法捕获处理该事件.
解决方法:
在checkbox、button对应的view处加android:focusable="false"
android:clickable="false" android:focusableInTouchMode="false"
其中focusable是关键
从OnClickListener调用getSelectedItemPosition(),Click 和selection 是不相关的,Selection是通过D-pad or trackball 来操作的,Click通常是点击操作的。
arg2参数才是点击事件位置的参数
第二种方法 就是在自己的getView中
convertView = mInflater . inflate ( R . layout . list_item_text , null );
convertView . setClickable ( true );
convertView . setOnClickListener ( clickListener );
public OnClickListener myClickListener = new OnClickListener () {
public void onClick ( View v ) {
//code to be written to handle the click event
}
};
刚刚在网上找到问题的关键,终于解决了:
如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了,也就会响应onItemClickListener中的onItemClick()方法,然而将ListView的Item Layout的子控件focusable属性设置为false有点繁琐,我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItenClick()方法了。
如题,关键代码如下:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.bitmap_change);
iView = (ImageView)findViewById(R.id.iv);
originBg = BitmapFactory.decodeResource(this.getResources(), R.drawable.download_completed);
labelBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon);
int widthOrg = originBg.getWidth();
int heightOrg = originBg.getHeight();
resultBitmap = Bitmap.createBitmap(widthOrg,heightOrg,Config.ARGB_8888);
Canvas canvasIn = new Canvas(resultBitmap);
canvasIn.drawBitmap(originBg,0,0,null);
canvasIn.drawBitmap(labelBitmap,10,10,null);
canvasIn.save();
iView.setImageBitmap(resultBitmap);
// newMap = Bitmap.createBitmap(bitmap, 0, 0, widthOrg, heightOrg, matrix,true);
}
private Bitmap zoomBitmap(float scale)
{
Matrix m = new Matrix();
m.postScale(scale, scale);
resultBitmap = Bitmap.createBitmap(resultBitmap, 0, 0, resultBitmap.getWidth(), resultBitmap.getHeight(), m, true);
return resultBitmap;
}
1.构建一个helloworld的android程序非常简单,直接new 一个android的项目,直接运行,一个helloworld的项目就完成了。这一篇主要详细讲一下android的项目目录结构以及源码关联。看图:
相对于J2EE项目结构的灵活,Android项目的结构显得比较固定,只要你弄清楚每个资源文件里面该放什么东西,就不会出现J2EE中,资源放错地方not found的问题。当然两者的相同之处还是很明显的,android项目中围绕着四大组件构建起来的业务逻辑,在JavaEE中你可以看作是Servlet或者SSH,每一个组件或者每一个框架都负责处理属于自己的东西。AndroidManifest.xml可以看做是web.xml。
src :包含应用程序的所有源代码
gen :gen下面的R类是自动生成的,这是一个非常顽强的类即使把它删除也会自动创建。这个类里面 包含很多内部类,每个内部类对应相应的资源文件。
public final class R { public static final class attr { } //此类对应res资源包下的drawable public static final class drawable { //每一张图片都会生成一个唯一的整型标识符 public static final int icon=0x7f020000; } //此类对应布局文件layout public static final class layout { //位布局文件生成的对应的标识符 public static final int main=0x7f030000; } //对应values资源包主要用于国际化 public static final class string { //为不同的字符串生成相对应的标识符 public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }
assets: 可以存放一些其他,额外的文件或者资源
res:资源文件包 drawable用于存放图片资源,layout用于存放布局文件,values用于存放程序所
需文字资源。着重说一下drawable,在之前的版本中,只有一个drawable,而2.1版本之后(包括 2.1)出现了drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。
他们的主要区别:
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
AndroidManifest.xml:应用程序的描述文件,此文件定义应用程序的Activity,ContentProvider,Service,receiver以及意图过滤器。还定义了应用程序所需要的权限等等。
Default.properties:主要定义了应用程序最低的兼容版本。
Proguard.cfg:主要用于优化,压缩,混淆java字节码文件的工具。
2,开发中经常需要扩展或者自定义某些功能,这就需要对源代码有一些深入的了解。目前android 除了支持平板的3.0以上的版本源码还没有开放。其余版本都可以下载到。说一下如何关联源码。例如我关联android2.2版本的。
然后在Eclipse上新建一个android的程序,右键→properties→Java Buid Path
此时源码已经关联好了,但是还有一个类无法找到。Manifest.java 权限的清单文件。这个类定义了所有需要用到的权限。
重启Eclipse,查找一下该类,看下是否关联上!
有需要源码的留下邮箱。
3ks...
3ks
麻烦博主发给我一份。谢谢
麻烦楼主给我发一份
楼主给我发一份,谢谢啦
assassinme@163.com