`

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;
	}
	
}

分享到:
评论

相关推荐

    android 自定义listview实现仿微信/QQ设置界面demo

    5. **点击事件处理**: 为了响应用户的点击操作,我们需要在getView()方法中为ListView项设置OnClickListener,或者在Adapter之外的代码中为ListView设置OnItemClickListener。 6. **自定义样式**: 微信和QQ的设置...

    自定义listview

    总的来说,自定义ListView是Android开发中的一个重要技能,它需要开发者对数据适配器、视图复用、事件处理以及性能优化有深入的理解。通过熟练掌握这些技巧,开发者能够创建出符合业务需求、用户体验优秀的应用界面...

    Android listview和button点击事件冲突问题解决方法

    这使得Button无法获取焦点,但仍然可以响应点击事件。然而,这样处理后,虽然解决了Button获取焦点的问题,但新的问题是,点击ListView项时,Button仍会出现按下的视觉效果。这是因为即使Button没有焦点,它的`...

    自定义ListView

    总之,自定义ListView涉及多方面的技术,包括数据模型、Adapter设计、视图复用、事件监听以及性能优化。熟练掌握这些知识点,可以使你的Android应用具备更丰富、更个性化的列表展示功能。在实际开发中,不断实践和...

    android listview单击事件

    2. **设置监听器**:为了响应用户的点击,我们需要在ListView上设置一个OnItemClickListener。在Activity或Fragment中,你可以通过调用ListView的`setOnItemClickListener()`方法来实现。例如: ```java listView....

    Android 点击listview弹出popupwindow弹出框

    接下来,我们要在`ListView`的`OnItemClickListener`中处理点击事件,当用户点击`ListView`的某一项时,弹出`PopupWindow`。同时,为了实现右滑删除功能,我们需要使用`SwipeRefreshLayout`和`AbsListView....

    045集-ListView列表项点击事件

    2. **监听点击事件**:在Android中,有两种主要方式来监听ListView的点击事件:通过设置OnItemClickListener和使用自定义适配器。OnItemClickListener允许你在用户点击ListView项时执行特定操作,而自定义适配器则...

    android多选ListView示例

    为了响应用户的操作,我们需要设置ListView的OnItemClickListener和OnItemLongClickListener。当选中状态改变时,我们可以更新Adapter中的选中状态,并可能需要同步到其他数据结构(如数据库)。 ```java listView....

    Listview自定义Adapter显示省名并响应item事件

    以上就是如何在Android中使用自定义Adapter显示ListView并响应item点击事件的基本步骤。这只是一个基础示例,实际应用中可能需要处理更多细节,如加载数据、异步操作等。但这个例子已经足够让你理解Adapter的工作...

    android 一些listview例子

    2. 点击事件处理:可以通过设置OnItemClickListener监听ListView的点击事件,实现列表项的点击响应。 3. 拉取刷新和下拉加载:为了提高用户体验,许多应用实现了上拉加载更多和下拉刷新功能,这通常需要结合...

    Android漂亮的Listview完整版本

    2. **布局设计**:设计ListView的布局文件,包括定义滚动方向(水平或垂直),响应的点击事件等。 3. **代码编写**:编写Java或Kotlin代码实现ListView的动态加载,如适配器(Adapter)的实现。 4. **测试和优化**:...

    android中一个简单的LIstView用法例子

    5. **事件监听**:为了响应用户的点击事件,可以为ListView添加一个OnItemClickListener。在监听器中,你可以处理用户点击项目的逻辑。 下面是一个简单的示例代码: ```java // 创建数据源 String[] items = {...

    ListView中嵌入Button ,ListView的item与Button的click事件分别被响应,同时还实现了类似Digg的item点击效果

    本示例中,我们将探讨如何在ListView中嵌入Button,并处理Button的点击事件,同时确保ListView item自身的点击事件也被正确响应。此外,我们还将实现一种类似Digg网站的点击效果,即当用户点击item时,其视觉表现会...

    listView上增加button点击事件

    但这样又会导致Button无法响应点击。更优雅的解决方案是,通过判断点击位置来区分是Button还是ListView被点击: ```java listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override ...

    实现listview按钮响应

    在ListView的上下文中,我们可以创建一个自定义接口,如`OnItemClickListener`,并将其添加到ListView的适配器中。这样,当用户点击按钮时,适配器可以通过接口回调相应的处理方法。 以下是实现步骤: 1. **创建回...

    Android用PopupWindow实现弹出listview形式菜单

    为了响应用户的点击操作,你需要在Adapter的`getView`方法中为每个项设置监听器,或者在`ListView`上设置`OnItemClickListener`。 至此,你已经成功地使用`PopupWindow`实现了弹出`ListView`形式的菜单。在实际...

    Android 中ListView点击Item无响应问题的解决办法

    另一个解决方案是自定义ListView的Adapter,并在`getView()`方法中处理点击事件。这样,你可以直接监听每个Item的点击,而无需依赖于控件的焦点机制。在`getView()`方法中,为每个Item的根布局设置点击监听器: `...

    Android开发教程:仿通讯录ListView小例子

    快速操作是Android中一种快速响应用户长按事件的方式,通常会弹出一个包含多个选项的小窗口。实现快速操作可以使用第三方库,如Android-QuickAction,或者自定义PopupWindow。在这个例子中,当用户长按通讯录条目时...

    Android联动ListView

    2. **监听ListView的点击事件**:使用OnItemClickListener监听第一个ListView的点击事件。当用户选择一个省份时,触发相应的事件处理函数。 3. **更新二级列表**:在点击事件处理函数中,根据所选省份获取对应的...

Global site tag (gtag.js) - Google Analytics