Android新手必读的RecyclerView使用总结

RecyclerView比ListView要复杂一些,如果总结起来,使用方法也很清晰。希望我的总结能帮助到更多的Andoid爱好者。

demo

1.依赖库

使用RecylerView需要Google支持库recyclerview-v7

2.RecylerView

作用:回收和定位屏幕上的View,列表项显示数据还是需要另外两个子类的支持:ViewHolder子类和Adapter子类。

  • setLayoutManager方法,需要LayoutManager的支持,LinearLayoutManger数值列表,GridLayoutManager网格列表。
  • setAdapter方法,设置RecylerView.Adapter
    FragmentBeatBoxBinding binding = DataBindingUtil
            .inflate(inflater, R.layout.fragment_beat_box, container, false);
    binding.recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
    binding.recyclerView.setAdapter(new SoundAdapter(mBeatBox.getmSounds()));
  • 1
  • 2
  • 3
  • 4

3.RecylerView.ViewHolder

作用:容纳子项的View视图

  • 构造方法:调用super()传入总的布局视图,实例化视图组件
  • bind方法:传入数据模型,将模型的值传给组件
private class SoundHolder extends RecyclerView.ViewHolder{
    private ListItemSoundBinding mBinding;

    public SoundHolder(ListItemSoundBinding binding) {
        super(binding.getRoot());
        mBinding = binding;
        mBinding.setViewModel(new SoundViewModel(mBeatBox));
    }

    public void bind(Sound sound){
        mBinding.getViewModel().setSound(sound);
        mBinding.executePendingBindings();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

4.RecylerView.Adapter

作用:管理子项

  • 创建必要的ViewHolder
  • 绑定ViewHodler到模型层数据

RecylerView和Adapter会话:

  1. getItemCount(),询问数组列表包含对象个数
  2. onCreateViewHolder(ViewGoup, int)创建ViewHolder和要显示的视图
  3. 传入ViewHolder及其位置,调用onBindViewHolder(ViewHolder, int),找到目标位置的数据并绑定到ViewHolder视图上。

使用:

private class SoundAdapter extends RecyclerView.Adapter<SoundHolder>{

    private List<Sound> mSounds;

    public SoundAdapter(List<Sound> sounds) {
        this.mSounds = sounds;
    }

    @Override
    public SoundHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        ListItemSoundBinding binding = DataBindingUtil
                .inflate(inflater, R.layout.list_item_sound, parent, false);
        return new SoundHolder(binding);
    }

    @Override
    public void onBindViewHolder(SoundHolder holder, int position) {
        Sound sound = mSounds.get(position);
        holder.bind(sound);
    }

    @Override
    public int getItemCount() {
        return mSounds.size();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值