ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RecyclerView使用

2020-12-25 02:32:44  阅读:235  来源: 互联网

标签:ViewHolder holder fruit 使用 RecyclerView public view


RecyclerView使用

一、引入相关包

在app/build.gradle文件中添加如下依赖:

implementation 'androidx.recyclerview:recyclerview:1.0.0'

注:包的版本查询可在https://mvnrepository.com/中查找。

二、在布局文件中引用RecyclerView

示例:

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

三、创建item布局文件

RecyclerView显示的是多个相同的item,创建布局文件设置item的布局。

示例:

fruit_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
    	android:id="@+id/fruit_image"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"/>
    
    <TextView
    	android:id="@+id/fruit_name"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"/>
</LinearLayout>

四、创建适配器Adapter

RecyclerView一个适配器Adapter,实现将数据显示到相应的view上。

示例:

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder>{
    private List<Fruit> mFruitList; //设置成员变量,用于存放数据。
    
    //创建ViewHolder类,用于保存item子View。防止多次使用findViewById影响性能
    static class ViewHolder extends RecyclerView.ViewHolder{
        View fruitView;
        ImageView fruitImage;
        TextView fruitName;
        
        public ViewHolder(View view){
            super(view);
            fruitView = view;
            fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
            fruitName = (TextView) view.findViewById(R.id.fruit_name);
        }
    }
    
    public FruitAdapter(List<Fruit> fruitList){
        mFruitList = fruitList;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.fruit_item, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, int position){
        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitName.setText(fruit.getName());
    }
    
    @Override
    public int getItemCount(){
        return mFruitList.size();
    }
}

五、设置RecyclerView

获取RecyclerView控件,设置LayoutManager和adapter。

示例:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler.view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);//设置布局模型,LinearLayout默认情况下为纵向布局
layoutManger.setOrientation(LinearLayoutManager.HORIZONTAL);//设置为横向布局
recyclerView.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);

设置为流式布局:

通过使用StaggeredGridLayoutManager设置流式布局,该类的构造函数第一个参数为指定布局的列数第二个参数为指定布局方向

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler.view);
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, 
                        StaggeredGridLayoutManager.VERTICAL);//设置布局模型,LinearLayout默认情况下为纵向布局
layoutManger.setOrientation(LinearLayoutManager.HORIZONTAL);//设置为横向布局
recyclerView.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);

六、设置子项即Item的监听事件

在Adapter类文件中的onCreateViewHolder方法中添加监听事件。

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder>{
    private List<Fruit> mFruitList; //设置成员变量,用于存放数据。
    
    //创建ViewHolder类,用于保存item子View。防止多次使用findViewById影响性能
    static class ViewHolder extends RecyclerView.ViewHolder{
        View fruitView;
        ImageView fruitImage;
        TextView fruitName;
        
        public ViewHolder(View view){
            super(view);
            fruitView = view;
            fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
            fruitName = (TextView) view.findViewById(R.id.fruit_name);
        }
    }
    
    public FruitAdapter(List<Fruit> fruitList){
        mFruitList = fruitList;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.fruit_item, parent, false);
        ViewHolder holder = new ViewHolder(view);
        
        //设置监听事件
        holder.fruitImage.setOnClickListener(new View.OnClickListener(){
        	@Override
            public void onClick(View v){
                int position = getAdapterPosition(); //获取数据的位置
                Fruit fruit = mFruitList.get(position);
                Toast.makeText(v.getContext(), "点击了", Toast.LENGTH_SHORT).show();
            }
        });
        
        return holder;
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, int position){
        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitName.setText(fruit.getName());
    }
    
    @Override
    public int getItemCount(){
        return mFruitList.size();
    }
}

标签:ViewHolder,holder,fruit,使用,RecyclerView,public,view
来源: https://www.cnblogs.com/JoyGin/p/14187130.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有