前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android-RecyclerView实用解析 Recycler.Adapter 的写法与介绍

Android-RecyclerView实用解析 Recycler.Adapter 的写法与介绍

作者头像
圆号本昊
发布2021-09-24 12:20:28
2K0
发布2021-09-24 12:20:28
举报
文章被收录于专栏:github@hornhuang

与复杂难用的 ListView 相比,RecyclerView 清晰的思路,简明的用法,强大的功能,无不预示着一个时代的过去,这里我主要讲讲 RecyclerView 基本使用

RecyclerView 的使用主要分三部分

  • Adapter 配适器的使用
  • recyclerView 设置配适器
  • 更新 RecyclerView 的内容
在这里插入图片描述
在这里插入图片描述

首先我们举个配适器的例子

代码语言:javascript
复制
public class ColopediaAdapter extends RecyclerView.Adapter<ColopediaAdapter.ViewHolder>{

    private List<Comment> mList ;

    class ViewHolder extends RecyclerView.ViewHolder {

        private ImageView authorIcon;
        private TextView  praiseNum;
        private TextView  authorName;
        private TextView  commontContent;
        private ImageView touchGood;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            authorIcon = itemView.findViewById(R.id.comment_author_image);
            authorName = itemView.findViewById(R.id.comment_author_name);
            praiseNum  = itemView.findViewById(R.id.comment_praise_nums);
            commontContent = itemView.findViewById(R.id.comment_content);
            touchGood = itemView.findViewById(R.id.touch_good);
        }
    }

    public ColopediaAdapter(List<Comment> mList){
        this.mList = mList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.clopedia_list_item_view, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
        viewHolder.authorIcon.setImageResource(mList.get(i).getImageId());
        viewHolder.authorName.setText(mList.get(i).getAuthorId());
        viewHolder.commontContent.setText(mList.get(i).getCommentContent());
        viewHolder.touchGood.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });

    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

}

不管是哪个配适器 首先要继承自 Recycler.Adapter ,然后都包含这几个基本要素:

ViewHolder

新建一个 ViewHolder 类,用于绑定控件

onCreateViewHolder

绑定每个 item 的布局

onBindViewHolder

实现每个控件的具体功能和点击事件

写完配适器后我们就可以实现改 RecyclerView 了

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_clopedia_huashupihua);

    iniViews();
    iniList();
    iniRecyclerView();

}

private void iniViews(){
    mComment = new ArrayList<>();
    recyclerView = (RecyclerView) findViewById(R.id.colopedia_recycler);
    commentSubmit = (TextView) findViewById(R.id.comment_submit);
    editText = (EditText) findViewById(R.id.colopedia_comment_content);

    commentSubmit.setOnClickListener(this);
}

private void iniRecyclerView(){
    LinearLayoutManager manager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(manager);
    adapter = new ColopediaAdapter(mComment);
    recyclerView.setAdapter(adapter);
}

private void iniList(){
    mComment = MainActivity.comments;
}

可以看到,实现过程主要包括

List

在一个 List 对象里,存放 item 的队列

adapter

根据 List 生成 Adapter

LinearLayoutManager

为 RecyclerView 配适管理器

更新 items 的内容
代码语言:javascript
复制
String content = editText.getText().toString();
                mComment.add(new Comment(R.drawable.baikepinglun_1_head, "小道夫",
                    content, 0));
                MainActivity.comments = mComment;
                adapter.notifyDataSetChanged();
这里给出 Comment 类的具体内容
代码语言:javascript
复制
public class Comment {

    private int imageId;          // 用户头像
    private String authorId;      // 用户名称
    private String commentContent;// 评论内容
    private int praiseNum;        // 点赞数目
    private boolean isPraised = false;//判断是否点赞

    /*
    构造方法
     */
    public Comment(int imageId, String authorId, String commentContent, int praiseNum) {
        this.imageId = imageId;
        this.authorId = authorId;
        this.commentContent = commentContent;
        this.praiseNum = praiseNum;
    }

    /*
    get()  &  set()
     */

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getAuthorId() {
        return authorId;
    }

    public void setAuthorId(String authorId) {
        this.authorId = authorId;
    }

    public String getCommentContent() {
        return commentContent;
    }

    public void setCommentContent(String commentContent) {
        this.commentContent = commentContent;
    }

    public int getPraiseNum() {
        return praiseNum;
    }

    public void setPraiseNum(int praiseNum) {
        this.praiseNum = praiseNum;
    }

    public boolean isPraised() {
        return isPraised;
    }

    public void setPraised(boolean praised) {
        isPraised = praised;
    }
}
这里给出活动的具体内容
代码语言:javascript
复制
public class Clopediahuashupihua extends AppCompatActivity implements View.OnClickListener {

    private RecyclerView recyclerView;
    private List<Comment> mComment;
    private TextView commentSubmit;
    private ColopediaAdapter adapter;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_clopedia_huashupihua);

        iniViews();
        iniList();
        iniRecyclerView();

    }

    private void iniViews(){
        mComment = new ArrayList<>();
        recyclerView = (RecyclerView) findViewById(R.id.colopedia_recycler);
        commentSubmit = (TextView) findViewById(R.id.comment_submit);
        editText = (EditText) findViewById(R.id.colopedia_comment_content);

        commentSubmit.setOnClickListener(this);
    }

    private void iniRecyclerView(){
        LinearLayoutManager manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);
        adapter = new ColopediaAdapter(mComment);
        recyclerView.setAdapter(adapter);
    }

    private void iniList(){
        mComment = MainActivity.comments;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.comment_submit:
                String content = editText.getText().toString();
                mComment.add(new Comment(R.drawable.baikepinglun_1_head, "小道夫",
                    content, 0));
                MainActivity.comments = mComment;
                adapter.notifyDataSetChanged();
                break;

            default:

                break;
        }

    }
}
使用到这些内容的项目地址:

点击右边跳转:点击跳转 https://github.com/FishInWater-1999/Android-shopping-FirstRoad

如果有帮助欢迎点赞哦~~

有问题请在评论区留言

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RecyclerView 的使用主要分三部分
  • 首先我们举个配适器的例子
    • 写完配适器后我们就可以实现改 RecyclerView 了
      • 更新 items 的内容
      • 这里给出 Comment 类的具体内容
      • 这里给出活动的具体内容
      • 使用到这些内容的项目地址:
      • 如果有帮助欢迎点赞哦~~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档