再调用listView.setSelection(selectIndex);前加一句
listView.requestFocusFromTouch();
===================================================
Android的ListView的点击高亮(续)
2010-07-25 17:30:07 作者:哈哈 正式编辑 有1048人浏览 网友评论 2 条
在上一篇Android的ListView的点击高亮文章中其实没有达到我想要我的效果,如果是不需要横竖屏的情况还是可以的,在这里我要强调大家别去用系统的adapter的getView和listView的getChildAt要改变View的背景。我在这方面下了很多功夫,都没实现,而且会出现大家预想不到的效果,下面我来介绍实现这个的终极办法,就是你在重写BaseAdapter或者其他adapter来实现,演示的主要代码如下:
view sourceprint?001.
public void onCreate(Bundle savedInstanceState) {
002.
super.onCreate(savedInstanceState);
003.
final MyListAdapter adapter=new MyListAdapter(this);
004.
setListAdapter(adapter);
005.// getListView().setSelector(R.drawable.selector);
006.
getListView().setOnItemClickListener(new OnItemClickListener(){
007.
008.
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
009.
adapter.setSelectItem(arg2);
010.
adapter.notifyDataSetInvalidated();
011.
}
012.
013.
});
014.
}
015.
016.
private class MyListAdapter extends BaseAdapter {
017.
public MyListAdapter(Context context) {
018.
mContext = context;
019.
}
020.
021.
public int getCount() {
022.
return mStrings.length;
023.
}
024.
025.
public boolean areAllItemsEnabled() {
026.
return false;
027.
}
028.
029.
public boolean isEnabled(int position) {
030.
return !mStrings[position].startsWith("-");
031.
}
032.
033.
public Object getItem(int position) {
034.
return position;
035.
}
036.
037.
public long getItemId(int position) {
038.
return position;
039.
}
040.
041.
public View getView(int position, View convertView, ViewGroup parent) {
042.
TextView tv;
043.
if (convertView == null) {
044.
tv = (TextView) LayoutInflater.from(mContext).inflate(
045.
android.R.layout.simple_expandable_list_item_1, parent, false);
046.
} else {
047.
tv = (TextView) convertView;
048.
}
049.
tv.setText(mStrings[position]);
050.
if(position==selectItem){
051.
tv.setBackgroundColor(Color.RED);
052.
}else{
053.
tv.setBackgroundColor(Color.TRANSPARENT);
054.
}
055.
return tv;
056.
}
057.
058.
059.
060.
public void setSelectItem(int selectItem) {
061.
this.selectItem = selectItem;
062.
}
063.
064.
private Context mContext;
065.
private int selectItem=-1;
066.
}
067.
068.
private String[] mStrings = {
069.
"----------",
070.
"----------",
071.
"Abbaye de Belloc",
072.
"Abbaye du Mont des Cats",
073.
"Abertam",
074.
"----------",
075.
"Abondance",
076.
"----------",
077.
"Ackawi",
078.
"Acorn",
079.
"Adelost",
080.
"Affidelice au Chablis",
081.
"Afuega'l Pitu",
082.
"Airag",
083.
"----------",
084.
"Airedale",
085.
"Aisy Cendre",
086.
"----------",
087.
"Allgauer Emmentaler",
088.
"Alverca",
089.
"Ambert",
090.
"American Cheese",
091.
"Ami du Chambertin",
092.
"----------",
093.
"----------",
094.
"Anejo Enchilado",
095.
"Anneau du Vic-Bilh",
096.
"Anthoriro",
097.
"----------",
098.
"----------"
099.
};
主要改动的代码就是:view sourceprint?1.public void setSelectItem(int selectItem) {
2.
this.selectItem = selectItem;
3.
}
4.
private int selectItem=-1;
当用户点击Item的时候,把当前的位置给adapter,并且通过adapter.notifyDataSetInvalidated();刷新整个ListView,就达到改背景的效果。
===========================================================================
在listview通过 ArrayAdapter 加入了一组数据, 并监听 OnItemClickListener 事件
但点击 listView的某一个Item时,已经触发了 OnItemClickListener事件,但是在item被选中时,被选中的 item周围会显示橙黄色,但有时橙黄色很快就消失了,有时还会存在,请问有什么办法解决?
另外,触发 OnItemClickListener 事件后,我会重新加载数据到另一个 listView listB中,这时,原来的listView listA会失去焦点,就是在 listA 的 OnItemClickListener事件中 最后部分重新请求聚焦 listA.requestFocus() 也没有用,请问有什么办法解决
总之,问题如下,如何保证触发 OnItemClickListener事件时,被选中的 item能显示明显的显示出来被选中了,同时在 listView 失去焦点时,也能够使被选中的Item高亮
谢谢
对我有用[0]丢个板砖[0]引用举报管理TOP 回复次数:10
yyy025025025
(yyy025025025)
等 级:
#1楼 得分:50回复于:2010-05-19 16:12:05
如需要阅读该回复,请登录或注册CSDN!
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:急求用过funambol的同仁,请教一些问题。
laorer
(堕落佛)
等 级:
#2楼 得分:0回复于:2010-05-19 16:28:20
谢谢回复,能不能具体说说
修改frameworks\base\core\res\res\drawable\list_selector_background.xml
里面的设置
我只找到了
<item android:state_focused="true" android:drawable="@color/state_focused"></item>
<item android:state_pressed="true" android:drawable="@color/state_pressed"></item>
但设置的是整个 listView的
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:想成为嵌入式程序员应知道的0x10个基本问题——转贴 经典!
yyy025025025
(yyy025025025)
等 级:
#3楼 得分:0回复于:2010-05-19 17:49:06
引用 2 楼 laorer 的回复:
谢谢回复,能不能具体说说
修改frameworks\base\core\res\res\drawable\list_selector_background.xml
里面的设置
我只找到了
<item android:state_focused="true" android:drawable="@color/state_focused"></item>
<item andr……
对的 这边会修改整个listview的属性。
我自己处理的listview的Onitemclick,会使用同样的selector,只不过我会自己设定item的状态。
通过 view.setSelected(selected);
view.setPressed(pressed)
来实现的状态转换。
所以推荐你使用第二种方法。
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:如何在程序中创建快捷方式的图标
laorer
(堕落佛)
等 级:
#4楼 得分:0回复于:2010-05-19 20:11:17
我在onItemClick事件中, view.setSelected(true); 会使得它与其他的 item不一样,但我还是不知道如何使 这个 item的颜色变成其它的颜色, 用 view.SetBackgroud吗? 我试过了,好像没效果
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:呕血整理个个精华,推荐观看!
yyy025025025
(yyy025025025)
等 级:
#5楼 得分:0回复于:2010-05-20 00:11:54
在adpater里面定义一个变量记录被选中的item,并提供设置接口
private int mItemIndex = -1;
public void setSelectItem(int index){
mItemIndex = index;
}
在onItemClick中,
public void onItemClick(AdapterView<?> parent, View view, int position,
long id){
mAdapter.setSelectItem(position);
view.setBackgroundColor(Color.BLUE);
}
在getView中,
public View getView(int position,View convertView, ViewGroup parent){
....
if(position == mItemIndex){
view.setSelected(true);
view.setPressed(true);
view.setBackgroundColor(Color.BLUE);
}
....
}
对我有用[0]丢个板砖[0]引用举报管理TOP
精华推荐:讨论:3G时代的到来,对手机软件开发影响会有多大呢?应用会有那些变化呢?
laorer
(堕落佛)
等 级:
#6楼 得分:0回复于:2010-05-20 09:40:21
OK, 可以了,昨天可能某个地方弄错了
谢谢了
对我有用[0]丢个板砖[0]引用举报管理TOP
laorer
(堕落佛)
等 级:
#7楼 得分:0回复于:2010-05-20 14:28:43
…… 我没办法只是被选中的高亮,现在出现的情况是原来被选中的仍在高亮,我不知道在哪里重设原来的被选中的Item的颜色
对我有用[0]丢个板砖[0]引用举报管理TOP
anbrul
(anbrul)
等 级:
#8楼 得分:0回复于:2010-07-14 17:01:07
引用 7 楼 laorer 的回复:
…… 我没办法只是被选中的高亮,现在出现的情况是原来被选中的仍在高亮,我不知道在哪里重设原来的被选中的Item的颜色
在getView的时候如果不是你选中的item就把背景还原回去。
对我有用[0]丢个板砖[0]引用举报管理TOP
liuxiue2010
(liuxiue2010)
等 级:
#9楼 得分:0回复于:2010-11-15 14:49:58
怎么还原啊?原来也没选中的时候也没设颜色啊。现在是所有列表选项都是选中以后的高亮状态。
对我有用[0]丢个板砖[0]引用举报管理TOP
laorer
(堕落佛)
等 级:
#10楼 得分:0回复于:2010-11-15 17:27:09
引用 9 楼 liuxiue2010 的回复:
怎么还原啊?原来也没选中的时候也没设颜色啊。现在是所有列表选项都是选中以后的高亮状态。
你要记录本次选中的 view,以便下次判断 选中的view是不是本次的选中的 view,如果不是,你就可以按照一般的方式来设置 view了
convertView=getLayoutInflater().inflate(R.layout.itemLayout,parent, false);
分享到:
相关推荐
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。然而,当列表项过多时,滚动时表头(Header)会随着滚动消失,给用户查看和理解数据带来不便。为了解决这个问题,开发者通常会实现一个固定...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。为了提升用户体验和界面设计的美观性,我们常常需要对ListView进行定制化,包括设置边框和实现圆角效果。本文将深入探讨如何在Android中实现...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在显示数据集合时十分有用。然而,当ListView的子项(item)宽度超过屏幕宽度时,如何实现自动换行就成了一个...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。然而,当在ListView的每一项中嵌套EditText时,会遇到一些挑战,主要包括EditText的焦点管理问题和数据错位问题。这两个问题在实际应用...
在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。本教程将重点讲解如何在ListView中实现下拉刷新和动态加载数据的功能,同时处理图文混排的问题。 首先,我们要引入SwipeRefreshLayout库,...
在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。它允许用户通过垂直滚动查看多行数据项。在许多应用中,我们可能需要添加一些交互性功能,比如长按删除,以增强用户体验。本篇文章将详细...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。而当需要在ListView中实现单选功能时,我们通常会使用RadioButton。本文将深入探讨如何在ListView中集成RadioButton,以及相关的实现...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。`Android listView选项滑动效果`是指通过增强ListView的功能,使每个列表项可以左右滑动,通常用于实现更多的交互操作,比如滑动删除、切换...
Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 blog 地址 : http://blog.csdn.net/aaawqqq/article/details/43824631
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据的列表,用户可以通过滚动查看更多的条目。这个教程将详细介绍Android ListView的基本用法。 ### 1. 添加ListView到布局 首先,在XML布局文件...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,比如联系人列表、邮件列表等。这个实例源码“Test_Golf1”很可能包含了一个完整的ListView应用示例,帮助开发者理解如何在Android中有效地...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。本篇文章将深入探讨“android listview”相关的知识点,包括横向ListView、微信风格的ListView以及XListView的优化。 首先,我们来看“横向...
在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。然而,随着移动应用交互体验的提升,用户期望更多的动态功能,如下拉刷新(Pull-to-Refresh)。下拉刷新功能允许用户通过在ListView顶部向下拉动...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。在“Android listview 逐行显示效果”这个主题中,我们将深入探讨如何在ListView中实现逐行动画显示的效果,特别是在Android 1.6版本及eclipse...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常配合适配器(Adapter)使用。本示例“android listView 适配器demo”将详细讲解如何利用适配器机制来动态填充ListView的数据。 首先...
在Android开发中,ListView与Fragment的结合使用是构建复杂用户界面的一种常见方法。在这个"android listview+fragment实现仿京东分类"项目中,我们将探讨如何利用这两种组件来模仿京东应用中的商品分类功能。以下是...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。当用户与列表交互时,为了提供良好的用户体验,通常需要实现点击项时的视觉反馈,比如改变item的背景颜色。本实例“android listview item背景色...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。"android listview左划删除"是ListView的一个常见扩展功能,允许用户通过手势左滑列表项来显示一个删除按钮,进而实现快速删除操作。这...
在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。本示例将详细介绍如何在Android Studio中创建一个简单的ListView。首先,我们需要理解ListView的基本结构和工作原理。 ListView是一个可...