大家都知道listview可以根据自己的需求,重写baseadapter ,实现自己的布局及数据,但是当我们在自己的布局中加入了button或者ImageButton,还有其他比如checkbox,radiobutton等控件时,发现listview不在响应onitemclick事件,让人很悲愤啊,自己在网找了个方法,可以处理掉这个东东 发生的原因:当listview中包含button,checkbox等控件的时候,android会默认将focus给了这些控件,也就是说listview的item根本就获取不到focus,所以导致onitemclick时间不能触发。 既然我们知道了,发生的原因,那么我们就将button等控件的在xml布局文件中的属性android:focusable设置为false,就ok了,但通常不这样做,因为要一个一个地修改button太麻烦,通常可以修改这些button的父容器的descendantFocusability属性为false,是否很方便呢,这样即可以触发onitemclick事件,同时我们在baseadapter实现类中也可以处理button等控件的事件,两不相误。 给一下源码把,因为jar中很多测试例子所以就不给全部了, 1.list.xml
复制代码
2.list_item.xml
复制代码
3.Activity的oncreate方法 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list); listView = (ListView) findViewById(R.id.list); final String[] title = {"衣服", "手机", "相机", "电视", "下载"}; BaseAdapter adapter = new BaseAdapter() { @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHodler hodler; if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(A.this); convertView = inflater.inflate(R.layout.list_item, null); hodler = new ViewHodler(); hodler.text = (TextView) convertView.findViewById(R.id.text); hodler.b = (Button) convertView.findViewById(R.id.button); convertView.setTag(hodler); } else { hodler = (ViewHodler) convertView.getTag(); } hodler.text.setText(title[position]); hodler.b.setText("立即订购" + title[position]); hodler.b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(A.this, "你好吗?", 1).show(); } }); return convertView; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public int getCount() { // TODO Auto-generated method stub return title.length; } class ViewHodler { TextView text; Button b; } }; listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(A.this, "这是listview的itemclick", 1).show(); } }); listView.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(A.this, "这是listview的onItemSelected", 1).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); } 如果发现错误,自己找一下,对自己有好处,不喜欢研究错误的程序猿不是好程序猿!!!!!!