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

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,会判断并返回相应的布局

Android数据绑定是一个支持双向绑定的库,它可以帮助你将UI组件和数据模型绑定起来,从而可以轻松地更新UI组件或数据模型的值。 Android RecyclerView是一种用于显示大量数据的高级组件,它可以在滚动动态地加载和卸载数据项,并提供了类似于ListView的布局管理器。 使用Android数据绑定和RecyclerView,可以更轻松地实现列表的数据绑定。你可以在适配器中使用数据绑定表达式来更新列表项视图的值,同还可以监听数据模型的变化,以便在数据更新刷新列表项。 要在RecyclerView中使用数据绑定,需要将适配器继承自RecyclerView.Adapter,并且在绑定视图使用DataBindingUtil类来获取视图的绑定对象。然后,可以在绑定对象中使用数据绑定表达式来更新视图的值。 例如,下面的代码片段演示了如何使用数据绑定更新RecyclerView列表项的文本视图: ```java public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private List<MyData> mDataList; // ... @Override public void onBindViewHolder(MyViewHolder holder, int position) { MyData data = mDataList.get(position); ViewDataBinding binding = DataBindingUtil.bind(holder.itemView); binding.setVariable(BR.myData, data); binding.executePendingBindings(); } } public class MyViewHolder extends RecyclerView.ViewHolder { // ... public MyViewHolder(View itemView) { super(itemView); } } ``` 在MyViewHolder类中,我们只需要简单地继承自RecyclerView.ViewHolder,并且不需要实现任何逻辑。在适配器的onBindViewHolder()方法中,我们首先获取当前位置的数据模型,然后使用DataBindingUtil.bind()方法获取视图的绑定对象。接下来,我们使用setVariable()方法将数据模型设置为绑定对象的属性,然后调用executePendingBindings()方法来立即更新视图。 需要注意的是,在使用数据绑定,你需要在build.gradle文件中添加以下依赖: ```groovy android { // ... dataBinding { enabled = true } } dependencies { // ... implementation 'com.android.databinding:library:1.4.0' } ``` 希望这个回答能够帮助你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值