listview数据为空的有好提示


打印 上一主题 下一主题

[Android实例]关于空ListView的友好提示样例

[复制链接]



电梯直达 跳转到指定楼层
楼主
发表于 3 天前 | 只看该作者 | 倒序浏览
1
本帖最后由 辽东小小 于 2013-5-14 22:56 编辑

在项目开发过程,ListView是非常常用的一个空间,但是往往会遇到因为网络或业务的原因,ListView没有加载到数据,光秃秃的一个ListView放在那里,显然不美观且不友好。通过在查找相关的资料,总结出以下两种方法来解决这个问题。
1.      ListView布局文件中设置
以下是 /EmptyListView/res/layout/activity_main.xml

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
< RelativeLayout 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 = ".MainActivity" >
< TextView
android:id = "@+id/hello_tv"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/hello_world" />
< ListView
android:id = "@+id/l_v"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_below = "@id/hello_tv" >
</ ListView >
< TextView
android:id = "@android:id/empty"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:gravity = "center_vertical|center_horizontal"
android:layout_below = "@id/l_v"
android:text = "@string/no_data" />
</ RelativeLayout >

用于显示提示信息的TextViewid是引用的SDK提供的id,当Adapter获取到的记录数为0时,系统会自动调用将TextViewsetVisibility(View.VISIBLE);
显示效果如下图:
效果1
2.      在java代码中调用ListView的setEmptyView(View emptyView)方法设置
publicvoid setEmptyView(ViewemptyView)方法来自于ListView的父类AdapterView。具体的实现方法如下:

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class MainActivity extends Activity {
private ListView l_v;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
l_v = (ListView) findViewById(R.id.l_v);
TextView tv = new TextView( this );
// 设置水平和垂直都居中
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setGravity(Gravity.CENTER_HORIZONTAL);
tv.setText(R.string.no_data);
// 布局样式,水平填充父控件,垂直匹配内容
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)l_v.getLayoutParams();
params.addRule(RelativeLayout.BELOW, 1 );
addContentView(tv, params);
l_v.setEmptyView(tv);
}
}

效果如下图:
效果2
这种方法会出现一个问题是,提示信息会在页面最上端显示。我自己通过params.addRule(RelativeLayout.BELOW, 1)的各种试都没好使,待解决(各位路过的大神,知道解决方案,请赐教)…

但是,若ListView上边没有其他控件则会正常显示。


以上两种方法都是,有系统自己控制,不用人为的去判断ListView是否为空,什么时候该显示信息,什么时候不显示。


你可能感兴趣的:(ListView,判断数据)