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);