问题:用Cursor传入数据,CursorAdapter根据数据填充ListView,ListView的每个List Item都可以点击。并且List Item包含一个Button,该Button也要对点击动作做出响应。(List Item 和它包含的Button的点击反馈不同)
给一个 ListView 设置 OnItemClickListener 之后,如果再设置 Button并设置OnClickListener,那么Listview不会响应点击动作。解决这个问题的办法很简单,添加一行代码即可。
myButton.setFocusable(false);
但是还有一个问题。当我们使用Cursor来传入数据,并由Adapter填充内容时,Cursor指向的始终是最新一行数据的位置,这会导致点击所有Button改变的都是最新一行的数据。为了解决这个问题,使用Tag来保存初始化Button时Cursor指向的位置,然后在onClick方法中获取Tag,就可以使Cursor指向正确的对应位置。
注意由于Button会在inner class中使用,所以必须声明final。