1.RecycleView的基本用法
RecyclerView是比ListView更强大的滚动控件,不仅可以实现ListView的效果,还优化了ListView中存在的不足。可以实现横屏滚动和竖屏滚动。
首先新建一个RecyclerViewTest项目,并让AndroidStudio自动创建好活动。由于RecyclerView属于新增的控件,Android团队为了让RecyclerView在所有的Android版本上都能使用,将其定义在support库当中。要使用RecyclerView控件就必须在项目的build.gradle中添加相应的依赖库。
1.1.添加依赖库
(1)在app/build.gradle文件中dependencies闭包中添加语句,compile 'com.android.support:recyclerview-v7:24.2.1’已经被弃用了,需要添加语句implementation ‘androidx.recyclerview:recyclerview:1.1.0’ 。添加完之后点击右上角Sync Now进行同步。
(2) 还有一种简便方法就是在->Project Structure->Dependencies->点击 ‘+’,选择1.Library Dependency。
搜索recyclerview,选择1.1.0,点击OK。
1.2.在布局中加入RecyclerView控件
定义id,宽度和高度。需要注意的是,需要写出完整的包路径,因为RecyclerView不是内置在系统SDK中的。
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
1.3.准备适配器
(1)新建Fruit类和fruit_item.xml文件。
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;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="150dp"
android:layout_height="150dp" />
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"/>
</LinearLayout>
(2)新建FruitAdapter类。继承RecyclerView.Adapter,泛型指定为FruitAdapter.ViewHelder,ViewHelder是在FruitAdapter中定义的内部类。
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private List<Fruit> mFruitList;
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView fruitImage;
TextView fruitName;
//view参数通常指RecyclerView子项的最外层布局
public ViewHolder(View view) {
super(view);
fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
fruitName = (TextView) view.findViewById(R.id.fruit_name);
}
}
//构造函数,把要展示的数据源传递进来,并赋值给全局变量mFruitList
public FruitAdapter(List<Fruit> fruitList) {
mFruitList = fruitList;
}
//重写 onCreateViewHolder()方法,创建ViewHolder实例
@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;
}
//重写onBindViewHolder()方法
@Override
public void onBindViewHolder(ViewHolder holder,int position) {
Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
}
//重写getItemCount()方法,返回总共有多少个子项
@Override
public int getItemCount() {
return mFruitList.size();
}
}
1.4.使用RecyclerView
public class MainActivity