listview 自带setEmptyView(EmptyView)方法,可以作为数据为空时的提示,但是EmptyView 必须处于 view Hierarchy 之中,才会起作用。
解决方案如下:
继承listview 写一个 EmptyListView:
/**
* Simple To Introduction
* 项目名称: MzxyStuAnd
* 包: thirds.SpListview
* 类描述: 当listview 的adapter 或数据为空时,自动设置其提示 为 “没有数据”
* 创建人: tan
* 创建时间: 2016/2/19 10:58
*/
public class EmptyListView extends ListView {
public EmptyListView(Context context) {
super(context);
}
public EmptyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EmptyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
setEmptyViews();
}
/**
* 设置listview数据为空时的 提示,在onlayout方法中设置可以保证获取此listview 的父ViewGroup
*/
private void setEmptyViews() {
if (getEmptyView()==null) {
ViewGroup viewParent=(ViewGroup)this.getParent();
TextView textView=new TextView(getContext());
ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
textView.setGravity(Gravity.CENTER);
textView.setLayoutParams(params);
textView.setText(R.string.no_data);
textView.setVisibility(GONE);
if (viewParent!=null) {
viewParent.addView(textView);
}
setEmptyView(textView);
}
}
}