Android ListView添加HeaderView后,头部TextView点击事件失效问题求助
Android ListView HeaderView 中 TextView OnClickListener 失效问题解决
嘿,我来帮你搞定这个问题!你遇到的ListView添加HeaderView后头部TextView点击不生效的情况,我之前也碰到过,大概率是你inflater布局的时候参数没弄对~
问题根源
你看这段代码里的inflater调用:
ViewGroup headerView = (ViewGroup) inflater.inflate(R.layout.item_header, list, true);
这里第三个参数传了true,意味着这个headerView会直接被添加到list这个父容器里,而之后你又调用了list.addHeaderView(headerView);,这就导致headerView被重复添加了一次。第一次被直接加到ListView里的时候,它的点击事件会被ListView的item点击事件拦截,所以你自己设置的TextView点击就没反应了。
解决方案
按下面的步骤修改代码就行:
- 第一步:修改inflater的第三个参数为
false,让headerView不会被立即添加到ListView中:
ViewGroup headerView = (ViewGroup) inflater.inflate(R.layout.item_header, list, false);
- 第二步:在调用
addHeaderView之前,给headerView里的TextView设置点击事件:
// 替换成你自己的TextView ID TextView headerTextView = headerView.findViewById(R.id.header_text_view); headerTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 这里写头部TextView的点击逻辑 Toast.makeText(getContext(), "头部TextView被点击啦", Toast.LENGTH_SHORT).show(); } });
- 第三步:保持后续的代码不变:
list.addHeaderView(headerView); list.setAdapter(musicBaseAdapter); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final Intent intent = new... } });
补充说明
这样修改后,headerView只会被添加一次,内部控件的点击事件不会被ListView的item点击拦截,就能正常触发啦。如果headerView里还有其他可点击的控件,也按照这个方式提前设置点击事件就好。
内容的提问来源于stack exchange,提问作者Jcy.D.Shanks
相关产品推荐
相关产品推荐

