目 录(本篇字数:1099)
二、ListView的右侧滚动条,设置显示/隐藏(默认显示)
三、ListView的Item分割线,设置显示/隐藏(默认显示)、分割线高度
-
介绍
ListView,众所周知,这是一个android中元老级别的控件之一了。虽然,我们现在大多数都用RecyclerView来替代它,但是它还是在我们初学者的必备知识点里。当然,它相对于RecyclerView来说,用法还是偏于简单的。因为ListView已经给我们封装好了太多的功能性的方法,我们只要会用就可以实现一个非常美观的UI效果。正是因为这些封装好的方法,导致它特别的繁重,所以可定制性无法和RecyclerView相提并论了。
但是,它在我们初学者的眼里,真的是一个神器。比如我们看看以下的一些方法,你会体会到它的易用性。首先,我开始介绍一下它的用法以及适配器的优化。
先来看一下这样的效果图,也是后面的对比图:
-
ListView使用攻略
在代码中设置和在布局文件中设置属性是一样的效果,以下只提供一种方式,举一反三。
一、ListView适配器优化
适配器模板代码(使用ViewHolder模式提高效率):
/**
* @Created by xww.
* @Creation time 2018/8/21.
*/
public class ListViewAdapter extends BaseAdapter {
private ArrayList<ContactEntity> mData;
ListViewAdapter(ArrayList<ContactEntity> data) {
this.mData = data;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_content, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.civPhoto.setImageResource(mData.get(position).getmPhoto());
holder.tvName.setText(mData.get(position).getmName());
holder.tvMessage.setText(mData.get(position).getmMessage());
return convertView;
}
static class ViewHolder {
CircleImageView civPhoto;
TextView tvName;
TextView tvMessage;
ViewHolder(View itemView) {
civPhoto = itemView.findViewById(R.id.item_image);
tvName = itemView.findViewById(R.id.item_name);
tvMessage = itemView.findViewById(R.id.item_message);
}
}
}
二、ListView的右侧滚动条,设置显示/隐藏(默认显示)
效果图:
1、在layout布局文件中的ListView下设置
android:scrollbars="none"
2、在代码中设置
lvContact.setVerticalScrollBarEnabled(false);
三、ListView的Item分割线,设置显示/隐藏(默认显示)、分割线高度
隐藏分割线效果图:
1、设置隐藏分割线
lvContact.setDivider(null);
设置分割线高度效果图:
2、设置分割线高度
lvContact.setDividerHeight(15);
-
自定义分割线
3、设置自定义的分割线
lvContact.setDivider(ContextCompat.getDrawable(this, R.drawable.item_divider));
四、取消ListView的Item点击效果
点击了无水波扩散效果:
//颜色值
<color>#00000000</color>
lvContact.setSelector(R.color.colorSelector);
五、无数据时,处理空ListView
当ListView无数据时:
布局:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="listview.example.x.slidelistview.MainActivity">
<ListView
android:id="@+id/lv_contact"
android:layout_width="match_parent"
android:layout_height="match_parent" />
/** 自己选择无数据时显示的图片,我这里随便选了一张,效果不是很好 **/
<ImageView
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/no_data" />
</android.support.constraint.ConstraintLayout>
代码:
ImageView view = findViewById(R.id.empty_view);
lvContact.setEmptyView(view);
六、ListView添加HeaderView和FooterView
View headerView = LayoutInflater.from(this).inflate(R.layout.header_view, null);
View footerView = LayoutInflater.from(this).inflate(R.layout.footer_view, null);
lvContact.addHeaderView(headerView);
lvContact.addFooterView(footerView);
七、ListView获得可视区域内的Item
//获得可见区域内第一个Item的位置,包括显示一半、一点
mListView.getFirstVisiblePosition();
//获得可见区域内最后一个Item的位置,同上
mListView.getLastVisiblePosition();
八、ListView的滑动监听函数介绍
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case SCROLL_STATE_IDLE: // 滑动停止时
break;
case SCROLL_STATE_TOUCH_SCROLL: // 正在滚动
break;
case SCROLL_STATE_FLING: // 手指用力滑动后,由于惯性继续再滚动
break;
}
}
/**
* ListView在滚动时一直会回调这个方法
*
* @param firstVisibleItem //第一个可见区域内Item位置
* @param visibleItemCount // 最后一个可见区域内Item位置
* @param totalItemCount // 总的Item个数
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//判断Listview是否到达顶部
isTop = firstVisibleItem == 0;
//判断Listview是否到达底部
isBottom = firstVisibleItem + visibleItemCount == totalItemCount;
}
©原文链接:https://blog.csdn.net/smile_Running/article/details/81902040
@作者博客:_Xu2WeI
@更多博文:查看作者的更多博文