文档章节

打造一个无数据显示无数据提示信息的ListView

xiaolei123
 xiaolei123
发布于 2017/04/28 17:21
字数 407
阅读 69
收藏 0
点赞 1
评论 0

最近我们测试人员说,我们的所有的列表都要做一个没有数据就提示没有数据,当时我的表情是这样的 =_=!!! 我的天呐……这么多列表真的要一个一个做嘛!!!然后我想了一下,那就直接改造Listview吧……说干就干。


没有数据的效果:

没有数据的时候


有数据的效果:

有数据的时候


代码: NoDataListView.java

package com.tianjs.tianjinsuop2p.widgets;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.Adapter;
import android.widget.ListView;

import com.tianjs.tianjinsuop2p.R;

/**
 * Created by xiaolei on 2017/4/28.
 */

public class NoDataListView extends ListView
{
    private int height = 0;
    private int width = 0;
    private Bitmap noDataBitmap = null;
    private Paint mPaint;

    private int minItem = 0;
    private int noDataImgInt = 0;

    public NoDataListView(Context context)
    {
        this(context, null);
    }

    public NoDataListView(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
    }

    public NoDataListView(Context context, AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);
        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.NoDataListView);

        noDataImgInt = array.getResourceId(R.styleable.NoDataListView_noDataImg, 0);
        minItem = array.getInt(R.styleable.NoDataListView_minItem, 0);

        if (noDataImgInt != 0)
        {
            noDataBitmap = BitmapFactory.decodeResource(getResources(), noDataImgInt);
        } else
        {
            noDataBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
        }
        mPaint = new Paint();

        array.recycle();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        height = MeasureSpec.getSize(heightMeasureSpec);
        width = MeasureSpec.getSize(widthMeasureSpec);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        Adapter adapter = getAdapter();
        super.onDraw(canvas);
        if (adapter == null || adapter.getCount() <= minItem)
        {
            canvas.drawBitmap(noDataBitmap, width / 2 - noDataBitmap.getWidth() / 2, height / 2 - noDataBitmap.getHeight() / 2, mPaint);
        }
    }
}


属性声明:

<declare-styleable name="NoDataListView">
    <!--最低Item数-->
    <attr name="minItem" format="integer"/>
    <!--没有数据时,显示的图片资源-->
    <attr name="noDataImg" format="reference"/>
</declare-styleable>

如何使用?

<com.tianjs.tianjinsuop2p.widgets.NoDataListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:divider="#00000000"
            android:dividerHeight="0dp"
            android:overScrollMode="never"
            android:scrollbars="none"
            app:minItem="0"
            app:noDataImg="@drawable/icon_wushuju"/>

其实就是在onDraw里面,检测到有几个item,如果adapter为null,或者adapter的count小于等于最小item数的话,就在背景显示没有数据的图片出来、

© 著作权归作者所有

共有 人打赏支持
xiaolei123
粉丝 36
博文 55
码字总数 32591
作品 3
深圳
Android中ListView动态加载数据

引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的数据,并...

postdep
2013/01/30
0
0
ReactNative基础(四)了解ListView的使用、实现GridView效果、编写一个真实网络请求案例

此博客基于react-native-0.48.4 ListView简介 一个核心组件,用于高效地显示一个可以垂直滚动的变化的数据列表。最基本的使用方式就是创建一个ListView.DataSource数据源,然后给它传递一个普...

a_zhon
2017/09/29
0
0
android API19如何实现阻塞式对话框

我的程序主界面是一个ListView,实现了批量导入数据的功能,在导入完成后会有一个导入成功或失败的提示,用户点击确定后,回到主界面。 目前的问题是,如果要执行刷新数据的代码,不管导入成...

folous
2016/04/20
150
6
一个android记事本的学习过程记录! (二)

在实现了保存文字的功能以后,接下来我们要实现在主页面中的ListView中显示出我们已经保存了的信息;既然要用ListView,则一定要有一个适配器adapter去添加内容,我们新创建一个MyAdapter去继...

小白杨啦啦
2016/05/01
276
0
实现用户在ListView上进行选择时出现向上或向下获取更多提示

在项目中遇到需求,需要实现用户在ListView上进行选择时,如果上方或下方有更多未加载出来的item,需要出现向上或向下获取更多提示的效果,所以简单介绍一下相关实现方法,谨以此抛砖引玉,如...

明月春秋
2017/11/27
0
0
android关于listview设置emptyview的问题

在平时使用listview的时候我们会判断是否有数据,没有数据就会显示一个提示界面,在代码中给listview.setEmptyView。这个问题就来了,设置的emptyview会填充满整个屏幕,并且把listview给挡住...

吕檀溪
2015/07/26
1K
2
【学习笔记】ListView初识

处理空ListView 之前在做空数据的时候,会在ListView同界面再放一个其它控件,然后在ListView数据为空时,将控件显示,有数据再隐藏。 最近发现有方法直接处理:ListView处理空数据时,可用通...

小树coding
2016/01/17
76
0
ListViewOnScrollListener详解(滑屏分页显示数据)

SCROLLSTATEFLING是指手指快速拖动后,手指离开,页面惯性滑动的状态。 ListView之滚动事件--OnScrollListener 在onScrollStateChanged(AbsListView view, int scrollState) 中,scrollState...

带梦想一7飞
2012/06/26
0
0
jqueryMobile 加载数据问题!

jqueryMobile在加载数据的时间 第一次时是从网络获取的数据(AJAX)获取到数据后我用localStorage保存在了本地,第二次加载的时间是从localStorage取的数据!但是加载的方法是一样的!就是一...

郏高阳
2012/12/28
1K
1
ListView通过CursorAdapter显示数据库内容

继续上一个例子,结合ListView中对SQLite进行操作。 通过CursorAdapter在ListView中的数据呈现 在上一个例子中,我们可以对SQLite中的数据库进行增删改查,将数据读到游标Cursor中,然后一一...

娶到笨笨
2014/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RESTful API 设计规范

关于「能愿动词」的使用 为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下: 必须 (MUST):绝对,严格遵循,请照做,无条件遵守; 一定不可 (MUST NOT):禁令,严令禁止; 应该 (S...

niithub
8分钟前
0
0
Spring Cloud云服务架构 - common-service 项目过程构建

我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来参考学习。 首先在构建spring cloud的common-service之前,我们需要准备的技术: Maven(项目构建)...

itcloud
9分钟前
0
0
oracle 如何查看日志?

Oracle日志查看一.Oracle日志的路径:登录:sqlplus "/as sysdba"查看路径:SQL> select * from v$logfile;SQL> select * from v$logfile;(#日志文件路径)二.Oracle日...

youfen
10分钟前
0
0
sap netweaver developer studio安装svn插件

问题 我现在在Sap的IDE(netweaver developer studio)上面安装svn插件。 步骤 确定IDE使用的eclipse版本 Help→About SAP NetWeaver Developer Studio→Installation Details→Features→F...

亚林瓜子
16分钟前
0
0
大数据开发学习的内容介绍,成都大数据培训机构哪里好?

大数据开发培训已经成为了越来越多人的选择,大数据开发工程师也是各公司争相争夺的金领人才之一了,在当今科技发展非常迅速的社会里,越来越多人把职业规划投向了大数据开发。这里为大家整理...

加米谷大数据
22分钟前
2
0
函数

函数 函数是Python中最主要也是最重要的代码组织和复用手段。作为最重要的原则,如果你要重复使用相同或非常类似的代码,就需要写一个函数。通过给函数起一个名字,还可以提高代码的可读性。...

火力全開
23分钟前
0
0
gulp-webserverf启动服务,局域网无法访问

如题,gulp-server启动的服务,只能本机访问,局域网通过ip无法访问; 启动的其它项目,均可以访问成功; 网上资源,很多说什么防火墙之类的问题,都无果; 只需要给启动服务添加参数即可, ...

littleFaye
25分钟前
0
0
RabbitMQ实战:5种模式和示例

应用RabbitMQ的5种队列 一、简单队列 P:消息的生产者 C:消息的消费者 红色:队列 生产者实现思路: 创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码...

spinachgit
26分钟前
0
0
mysql常见报错标号对应原因以及处理方法

mysql常见报错标号以及对应解决方法 报错标号 报错现象 解决方法 原因 1449 Cause: java.sql.SQLException: The user specified as a definer ('authplat_dev'@'%') does not exist 在控制台...

ChinaHYF
28分钟前
0
0
Java 监控系统技术选型

(1)操作系统监控 Sigar oshi (2)Tomcat监控 JMX 日志 (3)Oracle监控 日志 直连SQL查询 基于Druid连接池 (4)拓扑图 jtopo http://www.jtopo.com/demo/statictis.html...

cccyb
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部