当前位置: 代码迷 >> Android >> android 自定义listview没法响应点击事件OnItemClickListener
  详细解决方案

android 自定义listview没法响应点击事件OnItemClickListener

热度:75   发布时间:2016-05-01 19:26:48.0
android 自定义listview无法响应点击事件OnItemClickListener
  如果你的自定义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;	}	}
  相关解决方案