ListView之无数据时显示提示语的用法,recyclerView空数据的提示语

RecyclerView空数据的提示布局:

public class NearAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    
    private Context context;
    
    private final int VIEW_TYPE = -1;  //作为空数据的布局类型
    
    private List<ServiceInfo> dataList;
    
    private OnRecyclerItemClickListener mOnItemClickListener;//单击事件
    
    public NearAdapter(Context context, List<ServiceInfo> dataList) {
        super();
        this.context = context;
        this.dataList = dataList;
    }

    @Override
    public int getItemCount() {
        return dataList.size()>0?dataList.size():1;//不同点4,也是关键点
    }
    
    @Override
    public int getItemViewType(int position) {
        if(dataList.size()<= 0 ){
            return VIEW_TYPE; //不同点3
        }
        return super.getItemViewType(position);
    }

    @Override
    public void onBindViewHolder(ViewHolder arg0, int arg1) {
        if (arg0 instanceof MyEmptyHolder) {  //不同点2return;
        }  
        
        //TODO 填充数据 
        final MyViewHolder viewHolder = (MyViewHolder) arg0;
        ServiceInfo serviceInfo = dataList.get(arg1);
        /
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
        if (-1 == arg1) {  
            return new MyEmptyHolder(LayoutInflater.from(context).inflate(R.layout.item_empty, arg0, false));  
        }  
        
        View item = LayoutInflater.from(context).inflate(R.layout.fragment_near_list_view_item, arg0, false);
        return new MyViewHolder(item);
    }
    
    /**
    * 暴露给外面的设置单击事件
    */
   public void setOnItemClickListener(OnRecyclerItemClickListener onItemClickListener){
       mOnItemClickListener = onItemClickListener;
   }
    
    class MyViewHolder extends RecyclerView.ViewHolder{
        
        private LinearLayout near_lv_item_ll;
        private LinearLayout ll_price1;//第一种价钱

        public MyViewHolder(View itemView) {
            super(itemView);
            near_lv_item_ll = (LinearLayout) itemView.findViewById(R.id.near_lv_item_ll);
            ll_price1 = (LinearLayout) itemView.findViewById(R.id.ll_price1);
        }
    }
    
    /**
     * 空数据显示的   不同点1
     */
    class MyEmptyHolder extends RecyclerView.ViewHolder{

        public MyEmptyHolder(View itemView) {
            super(itemView);
        }
        
    }
    
    /**
     * 处理item的点击事件
     */
    public interface OnRecyclerItemClickListener {
        public void onItemClick(View view, int position);
    }
    
}

当我们使用ListView或GridView的时候,当列表为空的时候,我们需要一个特殊的View来提示用户操作,于是就有了setEmptyView().下面看看如何使用:
1.在布局文件中创建这个view
<LinearLayout 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"
    android:orientation="vertical"
     >
     <ListView 
         android:id="@+id/lv_names"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="#ffcccc"
         ></ListView>
     <TextView 
         android:id="@+id/tv_list_empty"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:text="当前没有成员"
         android:gravity="center"
         android:textSize="25sp"
         android:textColor="#888888"
         />

</LinearLayout>

在java代码中找到这个TextView 然后将这个view设置到listView上就可以:

tvListEmpty = (TextView) findViewById(R.id.tv_list_empty);

listView.setEmptyView(emptyView);//当listView没数据的时候就会显示emptyView,有就不会显示

2.在java代码中直接添加在没有数据时需要显示的view:  需要在设置适配器之后设置才有效

TextView emptyView = new TextView(this);  
emptyView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));  
emptyView.setTextColor(Color.BLUE);  
emptyView.setText("ListView还没有数据!");  
emptyView.setVisibility(View.GONE);//不要让提示的View在不该显示的时候显示出来   
emptyView.setGravity(Gravity.CENTER);//代表显示在ListView的中心位置  
emptyView.setTextSize(30);
//这个View必须在当前的View hierarchy的节点上
((ViewGroup) listView.getParent()).addView(emptyView);  
listView.setEmptyView(emptyView); 
posted @ 2016-08-08 13:14  ts-android  阅读(1604)  评论(0编辑  收藏  举报