Android ListView 相关知识小点总结

给listview item 增加长方形框的背景

1.在res/drawable/下新建:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <stroke android:width="2dp" android:color="#bcb3b3"/>

    <padding android:bottom="2dp"
              android:right="2dp"
              android:left="2dp"
              android:top="2dp"/>

    <corners android:radius="5dp"/>
    <solid android:color="#fffdfd"/>
</shape>
2.引用,在listview item 里的布局文件加上

android:background=”@drawable/rectangle”


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/rectangle"
    android:orientation="horizontal"
    android:layout_margin="6dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_name"
        android:textSize="20sp"
        android:layout_width="0dp"
        android:singleLine="true"
        android:layout_weight="1"
        android:text="name"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv_size"
        android:textSize="16sp"
        android:gravity="center"
        android:layout_marginLeft="5dp"
        android:text="kb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

Android_listview设置每条信息的间距

Android_listview设置每条信息的间距

设置listView的item间距,可以在xml布局文件中的listView下设置xml属性:
android:divider=”#00000000”
android:dividerHeight=”18dp”
解释:分隔线透明,高度为18dp。

ListView实现Item中关于点击事件的例子

https://blog.csdn.net/jdfkldjlkjdl/article/details/80868784

ListView.addHeaderView()用法及其注意事项

https://blog.csdn.net/jdfkldjlkjdl/article/details/78707059

动态刷新ListView中的某个item

https://blog.csdn.net/jdfkldjlkjdl/article/details/75377222

ListView封装实现下拉刷新和上拉加载(方式2)

https://blog.csdn.net/jdfkldjlkjdl/article/details/70229465

ListView应用之上拉加载更多

https://blog.csdn.net/jdfkldjlkjdl/article/details/52058250

ListView封装实现下拉刷新和上拉加载(方式1)

https://blog.csdn.net/jdfkldjlkjdl/article/details/51277941

ListView长按列表项弹出菜单 给菜单项添加事件 获取上下文

https://blog.csdn.net/jdfkldjlkjdl/article/details/49977631

ListView的简单实现

https://blog.csdn.net/jdfkldjlkjdl/article/details/43269153

onItemClick事件无效

原因:listview的item里面包含button或者imageview时,给listview设置onitemlongclick事件无效
解决:在listview的item布局文件里面的根元素里面添加属性android:descendantFocusability=”blocksDescendants”

内容被底部弹出UI遮挡

在使用listView显示聊天窗口时,弹出输入法,listview不会自动向上滚动,会遮盖内容,在manifest中的Activity加入:
android:windowSoftInputMode=”adjustResize”
如果还是不行,还可以继续给ListView设置如下三个属性:
android:fastScrollEnabled=”true”
android:scrollbarStyle=”insideInset”
android:transcriptMode=”normal”

包含checkbox时的点击事件

1.item根布局添加属性android:descendantFocusability=”blocksDescendants”
2.checkbox标签如下

<CheckBox
android:id="@+id/cb_checkbox"
style="@style/ChatCheckboxTheme"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_marginRight="25dp"
android:layout_marginTop="0dp"
android:gravity="center"
/>

Checkbox无需额外添加属性
Checkbox的点击事件可通过在适配器中采用回调来实现

setSelection无效的解决方案

原因一:界面初始化完成之后listview失去了焦点。

原因二:因为listview的item高度不一致,或者添加了headerview,在setadapter之后调用setSelection无法准确定位。

万能解决方法:

final ListView listView = new ListView(getActivity());
listView.post(new Runnable() {
    @Override
    public void run() {
        listView.requestFocusFromTouch();//获取焦点
         listView.setSelection(listView.getHeaderViewsCount()+10);//10是你需要定位的位置
    }
});

如果还是不行则:
final ListView listView = new ListView(getActivity());
listView.postDelayed(new Runnable() {
    @Override
    public void run() {
        listView.requestFocusFromTouch();
        listView.setSelection(listView.getHeaderViewsCount()+10);
    }
},500);

ListView分割线显示和隐藏

1、设置和取消每个item分隔线

解决方案:

ListView.setDivider(null);
android:Divider="@null";
android:divider="@drawable/listview_horizon_line"
Android:divider= “@color/color”

2、隐藏头部分隔线
listview分割线会在头部、数据item、及根部的底部打印,如果要取消头部分割线必须
先设置期方法

addHeaderView(headView, null, true);
addFooterView(footView, null, true);

注意:第三个参数必须为true,否则无效
//显示头部出现分割线
listview.setHeaderDividersEnabled(true);

//禁止底部出现分割线
listview.setFooterDividersEnabled(false);

参考链接

  1. https://blog.csdn.net/zzldm/article/details/52462724
  2. https://blog.csdn.net/aboutjunjun/article/details/9040827
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值