`
javacode23
  • 浏览: 29347 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android listView

阅读更多
再调用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 固定表头,固定前几列

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。然而,当列表项过多时,滚动时表头(Header)会随着滚动消失,给用户查看和理解数据带来不便。为了解决这个问题,开发者通常会实现一个固定...

    Android ListView边框圆角美化

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。为了提升用户体验和界面设计的美观性,我们常常需要对ListView进行定制化,包括设置边框和实现圆角效果。本文将深入探讨如何在Android中实现...

    Android listview自动换行

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在显示数据集合时十分有用。然而,当ListView的子项(item)宽度超过屏幕宽度时,如何实现自动换行就成了一个...

    android listview带有editText

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。然而,当在ListView的每一项中嵌套EditText时,会遇到一些挑战,主要包括EditText的焦点管理问题和数据错位问题。这两个问题在实际应用...

    android listview 下拉刷新 动态加载数据 图文混排

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。本教程将重点讲解如何在ListView中实现下拉刷新和动态加载数据的功能,同时处理图文混排的问题。 首先,我们要引入SwipeRefreshLayout库,...

    Android ListView长按删除

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。它允许用户通过垂直滚动查看多行数据项。在许多应用中,我们可能需要添加一些交互性功能,比如长按删除,以增强用户体验。本篇文章将详细...

    androidlistview里面使用radiobutton

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。而当需要在ListView中实现单选功能时,我们通常会使用RadioButton。本文将深入探讨如何在ListView中集成RadioButton,以及相关的实现...

    Android listView选项滑动效果

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。`Android listView选项滑动效果`是指通过增强ListView的功能,使每个列表项可以左右滑动,通常用于实现更多的交互操作,比如滑动删除、切换...

    Android listview和viewpager解决冲突 滑动冲突

    Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 blog 地址 : http://blog.csdn.net/aaawqqq/article/details/43824631

    android ListView简单用法

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据的列表,用户可以通过滚动查看更多的条目。这个教程将详细介绍Android ListView的基本用法。 ### 1. 添加ListView到布局 首先,在XML布局文件...

    Android ListView实例源码

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,比如联系人列表、邮件列表等。这个实例源码“Test_Golf1”很可能包含了一个完整的ListView应用示例,帮助开发者理解如何在Android中有效地...

    android listview

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。本篇文章将深入探讨“android listview”相关的知识点,包括横向ListView、微信风格的ListView以及XListView的优化。 首先,我们来看“横向...

    Android listview 下拉刷新

    在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。然而,随着移动应用交互体验的提升,用户期望更多的动态功能,如下拉刷新(Pull-to-Refresh)。下拉刷新功能允许用户通过在ListView顶部向下拉动...

    Android listview 逐行显示效果

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。在“Android listview 逐行显示效果”这个主题中,我们将深入探讨如何在ListView中实现逐行动画显示的效果,特别是在Android 1.6版本及eclipse...

    android listView 适配器demo

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常配合适配器(Adapter)使用。本示例“android listView 适配器demo”将详细讲解如何利用适配器机制来动态填充ListView的数据。 首先...

    android listview+fragment实现仿京东分类

    在Android开发中,ListView与Fragment的结合使用是构建复杂用户界面的一种常见方法。在这个"android listview+fragment实现仿京东分类"项目中,我们将探讨如何利用这两种组件来模仿京东应用中的商品分类功能。以下是...

    android listview item背景色点击效果实例

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。当用户与列表交互时,为了提供良好的用户体验,通常需要实现点击项时的视觉反馈,比如改变item的背景颜色。本实例“android listview item背景色...

    android listview左划删除

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。"android listview左划删除"是ListView的一个常见扩展功能,允许用户通过手势左滑列表项来显示一个删除按钮,进而实现快速删除操作。这...

    Android ListView简单示例

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。本示例将详细介绍如何在Android Studio中创建一个简单的ListView。首先,我们需要理解ListView的基本结构和工作原理。 ListView是一个可...

Global site tag (gtag.js) - Google Analytics