当listview没有数据显示时,通常显示一些提示语,一般都是先判断集合是否有数据,没数据就显示提示语,但是在listview有个方法setEmptyView(view),它的内部会自动判断这个集合是否有数据,但没有数据时就会显示空的view,源码实现:
@android.view.RemotableViewMethod
public void setEmptyView(View emptyView) {
mEmptyView = emptyView;
final T adapter = getAdapter();
final boolean empty = ((adapter == null) || adapter.isEmpty());
updateEmptyStatus(empty);
}
private void updateEmptyStatus(boolean empty) {
if (isInFilterMode()) {
empty = false;
}
if (empty) {
if (mEmptyView != null) {
mEmptyView.setVisibility(View.VISIBLE);
setVisibility(View.GONE);
} else {
// If the caller just removed our empty view, make sure the list view is visible
setVisibility(View.VISIBLE);
}
// We are now GONE, so pending layouts will not be dispatched.
// Force one here to make sure that the state of the list matches
// the state of the adapter.
if (mDataChanged) {
this.onLayout(false, mLeft, mTop, mRight, mBottom);
}
} else {
if (mEmptyView != null) mEmptyView.setVisibility(View.GONE);
setVisibility(View.VISIBLE);
}
}
看下源码就一幕了燃,
package com.example.listview;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView listview;
private ArrayList<String> datas;
private LayoutInflater inflater;
private MyAdapter adapter;
private TextView tvContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
tvContent = (TextView) findViewById(R.id.tvContent);
inflater = LayoutInflater.from(this);
initData();
adapter = new MyAdapter(datas,this);
listview.setAdapter(adapter);
listview.setEmptyView(tvContent);
}
private void initData() {
datas = new ArrayList<String>();
// for(int i=0;i<100;i++){
// datas.add("测试-------");
// }
}
class MyAdapter extends BaseAdapter{
public MyAdapter(List<String> datas, Context context) {
super();
}
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View converView, ViewGroup arg2) {
ViewHolder holder = null;
if(converView==null){
converView = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.tvContent = (TextView) converView.findViewById(R.id.tvContent);
converView.setTag(holder);
}else{
holder = (ViewHolder) converView.getTag();
}
holder.tvContent.setText(datas.get(position));
return converView;
}
class ViewHolder{
TextView tvContent;
}
}
}
activity.xml
<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"
>
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000" />
<TextView
android:id="@+id/tvContent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="没有数据"
android:gravity="center"
/>
</RelativeLayout>