1:普通listview很简单,只要在xml中添加提示的布局代码,并在代码中使用setEmptyView就可以了.不需要自己判断列表是空与否
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:gravity
=
"center_vertical"
android:orientation
=
"vertical"
>
<
include
layout
=
"@layout/fixed_headerview"
/>
<
ListView
android:id
=
"@+id/list"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:layout_weight
=
"1"
android:drawSelectorOnTop
=
"false"
android:fastScrollEnabled
=
"true"
android:textSize
=
"18sp"
/>
<
TextView
android:id
=
"@+/empty"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:layout_weight
=
"1"
android:gravity
=
"center"
android:padding
=
"15dip"
android:text
=
"@string/text_no_song"
android:textSize
=
"22sp"
android:visibility
=
"gone"
/>
</
LinearLayout
>
|
那你只需要以下的代码就可以了:
1
2
3
|
ListView listview = (ListView) findViewById(R.id.list);
View emptyView = findViewById(R.id.empty);
listview.setEmptyView(emptyView);
|
3:对于2.3以下版本,你不能在setAdapter()之后调用addHeaderView,否则闪退,特么的,网上说调用addHeaderView之前先调用setAdapter(null),亲测无效.怎么办,正在寻找答案中.
4:最终成功.前面的全部不要,只需要修改adapter,
@Override
public int getCount() {
// TODO Auto-generated method stub
return comment.size()==0?1:comment.size();
}
public View getView(final int position, View convertView, ViewGroup parent) {
if(comment.size()==0){
View emptyView=LayoutInflater.from(cxt).inflate(R.layout.empty_view, null, false);
return emptyView;
}
final ViewHolder holder;
if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) {
// 使用自定义的list_items作为Layout
原理就是当列表为空时给列表添加一个view,不是headView,而是一个普通的列表项,只是内容不同.切记加上判断 !(convertView.getTag() instanceof ViewHolder,否则有数据的时候会使用列表的缓存的emptyView,造成闪退
5:其它思路,把提示放在列表后面做为背景,当列表为空时显示,不为空时隐藏。未测试