如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了
我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendants”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItemClick()方法了。
----------------------------
改用自己的适配器。。这个方法比较好
public class Test2 extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); List<String> list = new ArrayList<String>(); list.add("hello"); list.add("world"); list.add("1"); list.add("2"); list.add("3"); list.add("4"); /** * 设置ListActivity的适配器 */ setListAdapter(new MyAdapter(Test2.this,list)); }}/** * 基于BaseAdapter的自定义Adapter * @author Administrator * */class MyAdapter extends BaseAdapter{ Context context; List<String> titles; /** * LayoutInflater 是将layout.xml转化成View的类 */ LayoutInflater lif; public MyAdapter(Context context,List<String> titles){ this.context = context; this.titles = titles; } /** * list总数 */ public int getCount() { return titles.size(); } /** * 返回 position项 */ public Object getItem(int position) { return null; } /** * 返回itemId */ public long getItemId(int position) { return position; } /** * View关键代码 */ public View getView(int position, View convertView, ViewGroup parent) { MyView mv; final int pos = position; /** * 自定义的view就是修改这个convertView就可以了 */ if(convertView == null){ mv = new MyView(); lif = LayoutInflater.from(context);//转化到context这个容器 convertView = lif.inflate(R.layout.layout, null);//设置要转化的layout文件 mv.tv = (TextView)convertView.findViewById(R.id.Title);//取得实例 mv.btn = (Button)convertView.findViewById(R.id.Button01);//取得实例 convertView.setTag(mv); }else{ mv = (MyView)convertView.getTag(); } mv.tv.setText(titles.get(position)); mv.btn.setText(titles.get(position)); /** * 组件的事件也是在这里做 */ mv.btn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { Toast.makeText(context, "我是Title:"+titles.get(pos)+" 的button", Toast.LENGTH_LONG).show(); } }); return convertView; } /** * 自定义的一个View * @author Administrator * */ private class MyView{ TextView tv; Button btn; } }