ListView由于其强大的功能,再过去的Android开发中,可以说是贡献卓越,直到今天仍然有不计其数的程序仍然使用。不过ListView也是有缺点的,它的扩展性不是太好,只能实现纵向滚动,不能实现横向滚动。所以Android就提供了一个更加强大的滚动组件----RecyclerView。他在ListView的基础上实现了更加强大的功能。
基本用法
1.增加依赖
这里我就不多说什么了,直接在UI界面点击后面的下载符号就能下载。
到时候后面会有一个下载按钮的。
2.修改activity_main.xml代码,并添加
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_view" />
</LinearLayout>
fruit_item.xml
<?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">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fruit_image" />
<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>
这里就是定一了一个RecyclerView的滑动组件
3.定义Fruit和Adapter
public class Fruit {
private String name;
private int imageId;
public Fruit(String name,int imageId){
this.name = name;
this.imageId = imageId;
}
public int getImageId() {
return imageId;
}
public String getName() {
return name;
}
}
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private List<Fruit> mFruitList;
//构造函数将传入的fruitList赋值给mFruitList
public FruitAdapter(List<Fruit> fruitList){
this.mFruitList = fruitList;
}
//这里定义的是我们FruitAdapter的内部泛型类 就是类似与数据模型
static class ViewHolder extends RecyclerView.ViewHolder{
ImageView fruitImage;
TextView fruitName;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fruitImage = (ImageView) itemView.findViewById(R.id.fruit_image);
fruitName = (TextView) itemView.findViewById(R.id.fruit_name);
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//加载 加载的xml布局 父组件 false 固定写法
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
//初始化ViewHolder
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//获取Fruit实例
Fruit fruit = mFruitList.get(position);
//设置ViewHolder模型的资源
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
}
@Override
public int getItemCount() {
return mFruitList.size();
}
}
4.修改MainActivity代码
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private List<Fruit> fruitList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFruit(); //初始化水果数据
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager); //这里的layoutManager用于指定recyclerView的布局方式
FruitAdapter adapter = new FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);
}
private void initFruit() {
for(int i = 0;i < 4;i++){
Fruit apple = new Fruit("apple",R.drawable.ic_launcher_background);
Fruit banana = new Fruit("banana",R.drawable.ic_launcher_background);
Fruit orange = new Fruit("orange",R.drawable.ic_launcher_background);
Fruit watermelon = new Fruit("watermelon",R.drawable.ic_launcher_background);
Fruit strawberry = new Fruit("strawberry",R.drawable.ic_launcher_background);
fruitList.add(apple);
fruitList.add(banana);
fruitList.add(orange);
fruitList.add(watermelon);
fruitList.add(strawberry);
}
}
}
运行。。。
ok了,然后里面的适配器需要多联系才能熟悉。基本都是固定的写法。。。