美文网首页
RecyclerView使用

RecyclerView使用

作者: 不会敲代码的好代码 | 来源:发表于2018-07-19 16:00 被阅读14次

    添加依赖

    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.github.bumptech.glide:glide:4.7.1'
    

    如果需要加载网络图片则需要添加Glide的模块依赖

    在xml文件中添加RecyclerView的控件

    <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
      </android.support.v7.widget.RecyclerView>
    

    也可以直接添加控件


    添加RecyclerView

    新建一个item的布局文件,绘制需要显示的item样式


    item布局

    新建一个Item类用于设置列表条目要显示的内容

    /**
     * 定义一个Item类用于保存每个条目的详细信息
     */
    public class Item {
        private String imgUrl;
        private String title;
        private String name;
        private int favorites;
        private int comments;
        public Item(String imgUrl,String title,String name,int favorites,int comments){
            this.imgUrl = imgUrl;
            this.title = title;
            this.name = name;
            this.favorites = favorites;
            this.comments =comments;
        }
    
        public String getImgUrl() {
            return imgUrl;
        }
    
        public String getTitle() {
            return title;
        }
    
        public String getName() {
            return name;
        }
    
        public int getFavorites() {
            return favorites;
        }
    
        public int getComments() {
            return comments;
        }
    }
    

    接下来新建一个ItemFactory工厂类用于制造每个item

    
    /**
     * 定义一个ItemFactory用于制造Item 对象
     */
    public class ItemFactory {
        private static String[] imgUrls = {
                //填入要显示的网络图片地址
        };
    
        private static String[] titles = {
                //填入要显示的标题
        };
    
        private static String[] names = {
                //填入要显示的姓名
        };
    
        public static List<Item> createItem(int num){
            Random random = new Random();
            List<Item> items = new ArrayList<>();
            int arrySize = imgUrls.length;
            for (int i=0;i < num;i++){
                int a = i%arrySize;
                String url = imgUrls[a];
                String title = titles[a];
                String name = names[a];
                int favorites = random.nextInt(10000);
                int comments = random.nextInt(10000);
                items.add(new Item(url,title,name,favorites,comments));
            }
            return items;
        }
    }
    
    

    接下来是最重要的添加适配器的过程

    
    /**
     * 适配器继承自RecyclerView.Adapter,<>里面是泛型MyHolder
     */
    public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyHolder>{//需要复写三个方法
        Context context;
        private List<Item> list;
    
        public RecyclerAdapter(Context context,List<Item> list){//传入一个显示列表,控制显示的条目数量
            this.list = list;
            this.context = context;
        }
    
        @NonNull
        @Override
        public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            //填充一个布局到ViewHolder里面
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
            MyHolder myHolder = new MyHolder(view);
            return myHolder;
        }
    
        @Override
        public void onBindViewHolder(@NonNull MyHolder holder, int position) {
            Item item = list.get(position);
            //利用Glide加载网络图片
            Glide.with(context).load(item.getImgUrl()).into(holder.imageView);
            holder.title.setText(item.getTitle());
            holder.name.setText(item.getName());
            holder.favorites.setText(String.valueOf(item.getFavorites()));
            holder.comments.setText(String.valueOf(item.getComments()));
        }
    
        @Override
        public int getItemCount() {
            //返回条目的数量
            return list.size();
        }
    
        /**
         * 自定义MyHolder继承自ViewHolder,用于控制每个item的元素,可以为单独的某个控件设置值
         */
        class MyHolder extends RecyclerView.ViewHolder{
            RelativeLayout itemLayout;
            ImageView imageView;
            TextView title;
            TextView name;
            TextView favorites;
            TextView comments;
            MyHolder(View itemView) {
                super(itemView);
                itemLayout = itemView.findViewById(R.id.item_layout);
                imageView = itemView.findViewById(R.id.iv_item);
                title = itemView.findViewById(R.id.text_item);
                name = itemView.findViewById(R.id.tv_name);
                favorites = itemView.findViewById(R.id.tv_favorite);
                comments = itemView.findViewById(R.id.tv_comment);
            }
        }
    }
    

    最后一步是在Activity文件中实例化RecyclerView和它的适配器

    
    public class MainActivity extends AppCompatActivity {
    
        private RecyclerView mRecyclerView;
        private RecyclerAdapter adapter;
        List<Item> list = ItemFactory.createItem(100);
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mRecyclerView = findViewById(R.id.recycler_view);
            adapter = new RecyclerAdapter(this,list);
            //设置LayoutManager
            mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
            //设置动画效果
            mRecyclerView.setItemAnimator(new DefaultItemAnimator());
            //设置适配器
            mRecyclerView.setAdapter(adapter);
            //添加默认的分割线
            mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
        }
    }
    

    原贴:
    https://www.jianshu.com/p/4782824d9307?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
    效果图见原贴

    相关文章

      网友评论

          本文标题:RecyclerView使用

          本文链接:https://www.haomeiwen.com/subject/hhutmftx.html