Android RecyclerView没有数据时显示空布局

本文详细介绍如何在Android开发中使用RecyclerView结合自定义Adapter实现空布局的显示与切换。通过判断数据列表的状态,动态选择展示空状态提示或正常的数据项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.写好空布局的layout文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:gravity="center"
    >
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:scaleType="fitStart"
        android:src="@drawable/pic">

    </ImageView>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="暂时没有数据呢!"
        android:textColor="@color/black">
    </TextView>

</LinearLayout>

重写Adapter

public class MyAdapter extends RecyclerView.Adapter {
    List<MyBean> items = new ArrayList<>();
    Context context ;
	//类型,用此来判断recyclerview该用哪个布局显示
    public final int TYPE_EMPTY = 0;
    public final int TYPE_NORMAL = 1;


	//根据list来判断用哪个布局
    @Override
    public int getItemViewType(int position) {
        if(items.size()<=0){
            return TYPE_EMPTY;
        }
        return  TYPE_NORMAL;
    }


    public MyAdapter(Context context, List<MyBean> items) {
        this.items = items;
        this.context = context;
    }


    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
		//若为空布局类型,则直接返回空的RecyclerView.ViewHolder
        if(viewType == TYPE_EMPTY){
            view = LayoutInflater.from(context).inflate(R.layout.view_empty_item,parent,false);
            return  new RecyclerView.ViewHolder(view){
            };
        }
       else {
           view = LayoutInflater.from(context).inflate(R.layout.view_rv_item, parent, false);
        }
		//否则返回自定义
        return new MyHolder(view);
    }
@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
	//先判断holder是否为自定义holder
       if(holder instanceof MyHolder){
           MyBean myItem = items.get(position);
           ((MyHolder)holder).titleTextView.setText(myItem.getTitle());
           ((MyHolder)holder).contentTextView.setText(myItem.getContent());
          
       }

    }

	//若应采用空布局,则应返回1来承载空布局
    @Override
    public int getItemCount() {
        if(items.size()<=0){
            return 1;
        }
        return items.size();
    }



	//自定义的空布局
    public class MyHolder extends RecyclerView.ViewHolder{
        //此处为正常布局的控件绑定(我用的butterknife,若用findviewbyid,可在构造方法用)
        @BindView(R.id.tv_title) public TextView titleTextView;
        @BindView(R.id.tv_content)public TextView contentTextView;
        
       public MyHolder(final View view){
           super(view);
           ButterKnife.bind(this,view);
           view.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   Bundle bundle = new Bundle();
                   bundle.putString("articleId",articleId);
                   Intent intent = new Intent(context, ArticleDetailActivity.class);
                   intent.putExtras(bundle);
                   context.startActivity(intent);
               }
           });

        }
    }
}

解释都在代码注释里啦

就这样根据activity传过来的list,会判断并返回相应的布局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值