Listview 常用设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Listview 常用设置相关的知识,希望对你有一定的参考价值。

最佳实践

  • listview设置android:descendantFocusability="afterDescendants"或item的根布局设置="blocksDescendants"
  • listview设置android:listSelector="#0000",然后在item的background中设置带选择器的背景
  • listview设置android:divider="#0000"及android:dividerHeight="0dp",然后在item中自己加上一条线
  • listview设置android:layout_height="match_parent"及android:layout_weight="2015"

item的背景色

    android:listSelector是为listview的条目设置被选中时的【背景色】的
  • 1、不做任何设置时,会使用系统默认的颜色(带选择器)
  • 2、可使用自定义的颜色="#f00",或带选择器的颜色="@drawable/tv_bg_selector"
  • 3、若设置为="@null",并不是不显示颜色,而是会显示某种特定的颜色(黄色+选择器)
  • 4、若设置为="@android:color/transparent"或="#0000",才会禁掉选中时的颜色

item间的分割线

    android:divider用于设置listview的条目之间【分割线】,android:dividerHeight用于设置条目间的分割线宽度
  • 1、不做任何设置时,会使用系统默认的颜色和粗细
  • 2、可使用自定义的颜色="#f00",或使用图片="@drawable/*";使用自定义颜色时需同时设置android:dividerHeight,使用图片时可不设置
  • 3、设置android:divider="#0000"或="@android:color/transparent"或android:divider="@null" 用于去掉分割线颜色


item的点击事件

  • 1、若Item中存在Button、CheckBox等控件,当点击item的时候,listview的setOnItemClickListener可能不响应,因为item中的Button把点击事件消耗掉了(虽然Button的点击事件也可能没响应),这时可以为【item】添加属性的android:descendantFocusability="blocksDescendants",这时,当点击Button时只响应Button的点击事件,当点击item其他区域时,只响应setOnItemClickListener。
  • 2、对于android:clickable属性的默认值,Button、CheckBox等天生就是让点击的控件默认是true,而对于TextView等控件则默认是false。
    • 2.1、对于TextView,若设置了背景或字体颜色选择器,则当点击此TextView 或此item其他空白区域时,TextView 都会响应设置的选择器;
    • 2.2、若手动设置TextView 的android:clickable="true",或在代码中为TextView设置了点击事件,则其点击事件的规则就和Button一样了。
  • 3、若item中的某个控件不能正常响应点击事件,可手动设置其android:clickable="true"和(或)android:focusable="false"试试看。

获取焦点的三种形式

    listview的android:descendantFocusability属性可设置以下三个值
  • beforeDescendants:父布局(item)优先其子控件(Button)而获取到焦点
  • afterDescendants:只有当子控件不需要获取焦点时父布局才获取焦点
  • blocksDescendants:父布局会覆盖子控件而直接获得焦点(常用!)

notifyDataSetChanged和notifyDataSetInvalidated

  • notifyDataSetChanged 方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。
  • notifyDataSetInvalidated 方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,比如该数据集不再有效,就会调用此方法。
  • 如果要刷新的数据源改变了就调用notifyDataSetChanged,会重绘当前可见区域 ,例如我们刷新微博时
  • 如果那个数据源失效了之后就调用notifyDataSetInvalidated,会重绘控件(还原到初始状态)

让listview定位到某一item

listview.setSelection(int position);
adapter.notifyDataSetChanged();

setOnItemClickListener参数含义

    ListView的setOnItemClickListener()方法中的OnItemClickListener监听器接口中的onItemClick()方法的四个参数
         mListView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MyActivity.this"onItemClick,position=" + position + ",id=" + id, 0).show();
            }
        });

    举个例子你会理解的更快:X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item,如果你点了b这个item。
    涵义如下:
  • AdapterView<?> parent:相当于listview Y的适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X
  • View view:是你点b这个item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
  • int position:是b在Y适配器里的位置,其值是从0开始顺序向下排的,这个值是最常用的
  • long id:是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,具体区别还没搞清楚







以上是关于Listview 常用设置的主要内容,如果未能解决你的问题,请参考以下文章

ListView常用方法-案例介绍

ListView常用属性

winform常用的属性(listview),常用容器(二者结合)

C#winfrom listview 设置显示图片

listview控件

Android ListView常见配置说明