在ListView中设置Selector为null会报空指针?

mListView.setSelector(null);//空指针 
试试下面这种: 
mListView.setSelector(new ColorDrawable(Color.TRANSPARENT));

如何让ListView初始化的时候就选中一项? 
ListView需要在初始化好数据后,其中一项需要呈选中状态。所谓"选中状态"就是该项底色与其它项不同,setSelection(position)只能定位到某个item,但是无法改变底色呈高亮。setSelection(position)只能让某个item显示在可见Item的最上面(如果Item超过一屏的话)! 就是所谓的firstVisibleItem啦! 
如果想要实现效果可以在listview所绑定的adapter里的getView函数里去完成一些具体的工作。可以记下你要高亮的那个item的index,在getView函数里判断index(也就是position),如果满足条件则加载不同的背景。

ListView的右边滚动滑块启用方法? 
    很多开发者不知道ListView列表控件的快速滚动滑块是如何启用的,其实辅助滚动滑块只需要一行代码就可以搞定,如果你使用XML布局只需要在ListView节点中加入  android:fastScrollEnabled="true" 这个属性即可,而对于Java代码可以通过myListView.setFastScrollEnabled(true); 来控制启用,参数false为隐藏。 
    还有一点就是当你的滚动内容较小,不到当前ListView的3个屏幕高度时则不会出现这个快速滚动滑块,该方法是AbsListView的基础方法,可以在ListView或GridView等子类中使用快速滚动辅助。

1. 更新ListView中的數據,通過調用BaseAdapter對象的notifyDataSetChanged()方法: 
      mAdapter.notifyDataSetChanged();

2. 每個listview都有無效的位置,如第一行的前一行,最後一行的後一行,這個無效的位置是一個常量. 
     ListView.INVALID_POSITION

3. 有時我們需要在程序中通過點擊按鈕來控制ListView行的選中,這就用到了在程序中如何使用代碼來選擇ListView項. 
         mListView.requestFocusFromTouch(); 
         mListView.setSelection(int index);

第一條語句並不是必須的,但是若你ListView項中含有Button,RadioButton,CheckBox等比ListView取得 焦點優先級高的控件時,那麼第一條語句是你必須加的.

4.  同樣的,若你ListView項中含有Button,RadioButton,CheckBox等比ListView取得 焦點優先級高的控件時,ListView的setOnItemClickListener是不被執行的,這時你需要在你的xml文件中對這些控件添加  android:focusable="false" 注意這條語句要放在xml文件中修改,在代碼中使用是無效的.

5. 如何保持ListView的滾動條一直顯示,不隱藏呢:  xml文件中做如下修改    android:fadeScrollbars="false"

6. ListView本身有自己的按鍵事件,即你不需要設置方向鍵的標識,按下方向鍵ListView就會有默認的動作,那如何進行控制,編寫自己的onKey呢,你需要在Activity中重寫dispatchKeyEvent(KeyEvent event);方法,在這裡面定義你自己的動作就可以了

ListView 自定义滚动条样式: 
<ListView android:id="@android:id/list" 
        android:layout_width="match_parent" 
        android:layout_height="0dip" 
        android:layout_weight="1" 
        android:stackFromBottom="true"//从下开始显示条目 
        android:transcriptMode="normal" 
        android:fastScrollEnabled="true" 
        android:focusable="true" 
        android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track" 
        android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb" 
/> 
//scrollbar_vertical_track,crollbar_vertical_thumb自定义的xml文件,放在Drawable中,track是指长条,thumb是指短条 
去掉ListView Selector选种时黄色底纹一闪的效果:

Xml代码  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <solid android:color="@android:color/transparent"/>
  4. <corners android:radius="0dip" />
  5. </shape>
  6. //listview.setSelector(R.drawable.thisShape);

或者还有一种办法: 
在Adapter中重写public boolean isEnabled(int position)方法,将其返回false就可以了,推荐采用此种办法,具体见http://gundumw100.iteye.com/admin/blogs/850654

Java代码  
  1. public boolean isEnabled(int position) {
  2. // TODO Auto-generated method stub
  3. return false;
  4. }

ListView几个比较特别的属性 
首先是stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值为true和false 
android:stackFromBottom="true"

第二是transciptMode属性,需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。 
android:transcriptMode="alwaysScroll"

第三cacheColorHint属性,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。 
如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了

第四divider属性,该属性作用是每一项之间需要设置一个图片做为间隔,或是去掉item之间的分割线android:divider="@drawable/list_driver"  其中  @drawable/list_driver 是一个图片资源,如果不想显示分割线则只要设置为android:divider="@drawable/@null" 就可以了

第五fadingEdge属性,上边和下边有黑色的阴影android:fadingEdge="none" 设置后没有阴影了~

第五scrollbars属性,作用是隐藏listView的滚动条,android:scrollbars="none"与setVerticalScrollBarEnabled(true);的效果是一样的,不活动的时候隐藏,活动的时候也隐藏

第六fadeScrollbars属性,android:fadeScrollbars="true"  配置ListView布局的时候,设置这个属性为true就可以实现滚动条的自动隐藏和显示。

如何在使用gallery在flinging拖动时候不出现选择的情况? 
这时候需要注意使用 
gallery.setCallbackDuringFling(false)

如何让ListView自动滚动? 
注意stackFromBottom以及transcriptMode这两个属性。类似Market客户端的低端不断滚动。 
<ListView android:id="listCWJ"  
     android:layout_width="fill_parent"  
     android:layout_height="fill_parent"  
     android:stackFromBottom="true"    
     android:transcriptMode="alwaysScroll"  
/> 
如何遍历listView 的的单选框?

Java代码  
  1. ListView listView = (ListView)findViewById(R.id.配置文件中ListView的ID);
  2. //全选遍历ListView的选项,每个选项就相当于布局配置文件中的RelativeLayout
  3. for(int i = 0; i < listView.getChildCount(); i++){
  4. View view = listView.getChildAt(i);
  5. CheckBox cb = (CheckBox)view.findViewById(R.id.CheckBoxID);
  6. cb.setChecked(true);
  7. }

如何让ListView中TextView的字体颜色跟随焦点的变化? 
我们通常需要ListView中某一项选中时,他的字体颜色和原来的不一样。 如何设置字体的颜色呢? 在布局文件中TextColor一项来设置颜色,但是不是只设置一种颜色,而是在不同的条件下设置不同的颜色: 下面是个例子:

Xml代码  
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_enabled="false" android:color="@color/orange"></item>
  4. <item android:state_window_focused="false" android:color="@color/orange"></item>
  5. <item android:state_pressed="true" android:color="@color/white"></item>
  6. <item android:state_selected="true" android:color="@color/white"></item>
  7. <item android:color="@color/orange"></item>
  8. </selector>
  9. 在获取焦点或者选中的情况下设置为白色,其他情况设置为橘黄色。

如何自定义ListView行间的分割线? 
所有基于ListView或者说AbsListView实现的widget控件均可以通过下面的方法设置行间距的分割线,分割线可以自定义颜色、或图片。 
在ListView中我们使用属性android:divider="#FF0000" 定义分隔符为红色,当然这里值可以指向一个drawable图片对象,如果使用了图片可能高度大于系统默认的像素,可以自己设置高度比如6个像素android:dividerHeight="6px" ,当然在Java中ListView也有相关方法可以设置。

ListView不通过notifyDataSetChanged()更新指定的Item 
Listview一般大都是通过notifyDataSetChanged()來更新listview,但通过notifyDataSetChanged()会把界面上现实的的item都重绘一次,这样会影响ui性能。 
可以通过更新指定的Item提高效率,伪代码如下:

Java代码  
  1. private void updateView(int itemIndex){
  2. int visiblePosition = yourListView.getFirstVisiblePosition();
  3. View v = yourListView.getChildAt(itemIndex - visiblePosition);//Do something fancy with your listitem view
  4. TextView tv = (TextView)v.findViewById(R.id.sometextview);
  5. tv.setText("Hi! I updated you manually");
  6. }

让ListView中长按某些Item时能弹出contextMenu,有些不能 
定义了一个listView,并为他设置了setOnCreateContextMenuListener的监听,但这样做只能使这个listView中的所有项在长按的时候弹出contextMenu 。 
有时希望的是有些长按时能弹出contextMenu,有些不能。解决这个问题的办法是为这个listView设置setOnItemLongClickListener监听,然后实现

Java代码  
  1. public boolean onItemLongClick(AdapterView<?> parent, View view,
  2. int position, long id) {
  3. if(id == 1){
  4. return true;
  5. }
  6. return false;
  7. }

如果这一项的id=1,就不能长按。 这样就可以了

ListView底部分隔线的问题 
      在工作中遇到了一个难题,就是一个listView在最下面的一个item下面没有分割线,要求是必须得有这条分割线。经过一通研究发现了这个奇怪的现象: 
      1. ListActivity有这条底部分割线。 
      2.在Activity中只有listview,没有别的控件的话也会有。 
      其实ListActivity也是一个Activity,只不过在其中使用了SetContentView(listView)方法设置了一个listView作为其显示的View而已。所以结论就是只要这个activity调用了SetContentView(listView)就会有这条底部分割线。 
      那么什么情况下才不会有这条分割线呢?在Activity中如果调用setContentView(View)而ListView只是内嵌入到这个View的话有可能会没有这条分割线。 
      分析其原因:通过加断点调试发现在listView中,所有的分割线都是通过画一个很窄的矩形来实现的,但是在画分割线前都会都会判断目前的位置A和listView的长度B,如果A=B了,那么就不会画这条分割线了。但是将Listview嵌入到一个View中,一般会设置为高度为wrap_content,这种情况下,最后那条分割线的位置刚好等于listView的高度,所以系统不会画上这条分割线。那要怎么样才会画上呢?很简单,将ListView的高度设置为fill_partent就可以了。 
     当然以上所说的都是item很少的情况下,如果item很多以至于必须显示滚动条的话,那最后一个item下面是肯定不会有分割线了。

原文: http://gundumw100.iteye.com/blog/1169065

转载于:https://www.cnblogs.com/shanzei/archive/2012/03/22/2411580.html

使用ListView应该注意的地方 很全相关推荐

  1. python很全的爬虫入门教程

    python很全的爬虫入门教程 一.爬虫前的准备工作 首先,我们要知道什么是爬虫 1.什么是网络爬虫? 网络爬虫是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁 ...

  2. 史上很全的注册表修改大全

    史上很全的注册表修改大全 请使用 Ctrl+F 键来查找你想要的 不想别人使用你电脑的某些功能,或是在网吧想使用某些功能,或是让自己的电脑速度更快 怎么办 如果你有点注册表的知识就OK拉 没有多深奥 ...

  3. qt string内带变量_QT QString 很全的使用 (转)

    QString, QByteArray, 和 QVariant这三个类和容器有许多相同之处,并且在一些情况下可以被当作特殊的容器. 同样,像容器,这些类使用隐式共享来优化内存和速度. 我们将从QStr ...

  4. 一个很全的中断资料网站

    一个很全的中断资料网站 http://lrs.fmi.uni-passau.de/support/doc/interrupt-57/INT.HTM posted on 2005-02-15 16:24 ...

  5. awesome-go:很全的go语言资源合集

    awesome-go:一个很全的go语言框架,库,软件合集 前面发过关于awsone-python, awsone django, flask.最近在学习golang,所以找到awsone-go 非常 ...

  6. 003很好的网络博客(TCP/IP)-很全

    http://www.cnblogs.com/obama/p/3292335.html 很全的计算机网络方面的资料.

  7. common-io-2.0的新功能之文件监控FileAlteration(文件监听的两种实现方法《很全的监听文件例子》)...

    common-io-2.0的新功能之文件监控FileAlteration(文件监听的两种实现方法<很全的监听文件例子>) 转载于:https://www.cnblogs.com/rocky ...

  8. 中文转换为拼音工具类(很全)

    中文转换为拼音工具类(很全) 1.所需的jar包 2.工具类(可以直接拿去用) 1.所需的jar包 <!--获取汉字的拼音--><dependency><groupId& ...

  9. html中只显示农历的完整代码,很全的显示阴历(农历)日期的js代码

    很全的显示阴历(农历)日期的js代码 发布于 2016-12-17 14:15:20 | 248 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客户端脚本语言Javascript ...

最新文章

  1. python 字符串的一些方法
  2. .net core linux 编译,.NET Core 源码编译的问题解析
  3. 如何使用echo指令向文件写入内容
  4. 项目管理:如何显性管理并提升Story分解能力
  5. IPv4 和 IPv6 有什么区别
  6. python工资一般多少p-Python P值
  7. 计网实验1--配置路由
  8. excel根据数据得出公式
  9. 计算机病毒——代码自解密
  10. java 验证码识别_java验证码识别
  11. 小米平板1-专用解账号锁激活设备救砖线刷包 一键刷机
  12. CSS盒子边框(border)样式综合样式
  13. 2022华中杯数学建模思路
  14. 数据挖掘学习笔记3-贝叶斯与决策树
  15. 适用于DSP的四阶矩阵求逆算法
  16. 认知升级篇:为什么我们一定要掌握自学能力?
  17. Python 棋子移动游戏
  18. ORA-03113数据库无法正常启动
  19. 【cnpm】cnpm的安装方法(附详细步骤)
  20. 嵌入式分享合集125

热门文章

  1. Intellij IDEA打开就闪退或关闭
  2. Android使用磁盘缓存DiskLruCache
  3. iOS单例创建的一点疑惑
  4. APP Widget的开发
  5. C#的ARRAYLIST 和HASHTABLE示例代码
  6. eclipse删除perspective
  7. 解决Lync Server 2013无法共享演示PPT
  8. Slackware中文帮助文档(前言)
  9. 大数据分析常用去重算法分析『HyperLogLog 篇』
  10. 通过JavaScript简单的操作DOM(一)