如果在一个list的item当中添加一个button,需要注意以下几点:
1.要在xml文件当中给button设置两个属性
android:focusable="false"
android:clickable="true"
如果不对button设置这两个属性,那么button就会抢夺该item的焦点,你的item就点不动了。如果我们想点击item是点击item效果,点击button是点击button效果,那么在button的属性中加上这两条就ok。
我用的是simpleadapter。需要先对是不是button先进行判断,代码如下:
listadapter.setViewBinder(new ViewBinder(){ @Override public boolean setViewValue(View view, Object data , String textRepresentation) { // TODO Auto-generated method stub if(view instanceof Button) { Button button=(Button)view; return true; } return false; } });
然后就是给button设置响应时间了,首先我们要继承adapter的getview方法。
代码如下:
listadapter=new SimpleAdapter(this,newlist ,R.layout.user,new String[]{"title","group","photo","username"},new int []{R.id.title,R.id.group,R.id.photo,R.id.username}){ @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if(convertView==null){ convertView=View.inflate(HTTPRequestActivity.this, R.layout.user, null); } final Button button=(Button)convertView.findViewById(R.id.group); button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub String groupname=(String)button.getText(); } }); return super.getView(position, convertView, parent); } };
在里面就可以添加消息响应了,注意:这个button的消息响应不能定义在oncreate()函数当中,是因为button是定义在item的布局文件当中的,所以所有item中的button共用一个button,其id相同,如果定义在oncreate中,就相当于给每一个item的button都定义。这是不可能的,根本无法获取其button对象,所以会报空指针错。只有在getview中得到button对象。