RecyclerView的基本用用法
程序员文章站
2022-05-05 08:55:45
...
- 基本使用方法
RecyclerView的基本使用方法与ListView基本类似,使用前需要在dependcies闭包中导入
implementation 'com.android.support:recyclerview-v7:28.0.0'
- 第一步、建立RecyclerView使用的简单布局界面
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<!--图片视图-->
<TextView
android:background="#16C7C7"
android:id="@+id/fruit_name"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="left"
android:layout_marginTop="10dp"
/>
<!--文字视图-->
布局界面中简单的添加入自己想要在RecyclerView中的显示的内容,此处以图像框和文本框为示例。
- 第二步、建立能够存放数据的类,并将数据存放在List清单中
基本类代码如下
public class Fruit {
private String name;
private int imageId;
//基本的类,用来存储需要显示的数据内容
public Fruit(String name, int imageId){
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
}
建立相应的适配器,实现对数据的处理和存储,方便后续RecyclerView的实现
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { //继承了这个类
private List<Fruit> mFruitList; //创建了一个泛型的清单
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView fruitImage;
TextView fruitName; //接收自Fruit类中的的显示内容
public ViewHolder(View view) {
super(view);
fruitImage = view.findViewById(R.id.fruit_image);
fruitName = view.findViewById(R.id.fruit_name); //找到指定的xml界面
}
} //内部类
public FruitAdapter(List<Fruit> fruitList){
mFruitList = fruitList; //将需要展示的数据源,获取到存入mFruitList中
}
@Override
public FruitAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fruit_item,viewGroup,false);
ViewHolder holder = new ViewHolder(view);
return holder;
} //继承了RecyclerView.Adapter,将fruit_item布局加载进入来,并创建ViewHolder对象,把加载的布局传入到构造方法中
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Fruit fruit = mFruitList.get(i);
viewHolder.fruitImage.setImageResource(fruit.getImageId());
viewHolder.fruitName.setText(fruit.getName()); //设置到i所指向的清单中viewHolder对象的内容
}
@Override
public int getItemCount() {
return mFruitList.size();
}
}
第三步、修改主活动代码及主活动的布局文件
布局文件如下
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
主活动代码如下
public class MainActivity extends AppCompatActivity {
private List<Fruit> friutList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
RecyclerView recyclerView = findViewById(R.id.recycler_view);
StaggeredGridLayoutManager layoutManager = new
StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
/*指定了布局的方式(3列,纵向排列),
布局方式还有多种多样的,比如LinearLayoutManger的默认布局,可以实现与ListView相同的样式,
横向滚动布局则需要修改布局文件的额布局样式以及主函数中来设置整体布局的排列方式
(setOrientation(LinearLayoutManger.HORIZONTAL))
*/
recyclerView.setLayoutManager(layoutManager); //recyclerView接收到上面所指定的布局方式
FruitAdapter adapter = new FruitAdapter(friutList); //适配器,用到了List<E>
recyclerView.setAdapter(adapter);//通过setAdapter()实现了这个对内容的一一显示
}
public void init(){
for(int i = 0; i < 5; i++){
Fruit first1 = new Fruit(getRandomLengthName("123"),R.drawable.apple);
friutList.add(first1);
Fruit first2 = new Fruit(getRandomLengthName("456"),R.drawable.apple);
friutList.add(first2);
Fruit first3 = new Fruit(getRandomLengthName("789"),R.drawable.apple);
friutList.add(first3);
}
}
}
PS:以上代码出自郭霖大神的第一行代码 ,只用于个人记录,学习历程和总结。