作為一個Android Studio的初學者,第一次使用簡書發布文章,如有錯誤,還請見諒。
今天將通過一個案例來為大家介紹RecyclerView的用法,下面是案例完成的圖片:
我們的最終目的就是要將一個個的對象在RecycleView中顯示出來,那么我們首先需要的就是一個RecycleView的對象,那么第一步就是在activity_main.xml中創建一個RecycleView的對象,并且高和寬都設置為填充父窗體:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
現在已經有了RecycleView的對象了,RecycleView是一條一條的內容,每一條相當于一個木板,我們希望它能表示成前面是一個圖片,后面是一行文字的格式,那么我們就需要再定義一個list_view.xml文件當作格式:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
接下來就要考慮怎么把我們的水果在Recycle View中顯示。我們有一個類——Adapt類,這是一個抽象類,它可以作為RecycleView與List之間的一個中介,簡單說就是將List中的對象一個一個地拿出來,再一個一個地加入到RecycleView中去。我們可以先new一個List,List需要范型,這就需要我們手動添加一個范型,到底添加什么范型呢?我們可以這樣想,我們想讓RecyclerView中的每一欄都顯示一種水果,那么我們可不可以一種水果為單位,List中放的是許多種水果,Adapt將List中的水果取出加入到RecyclerView中去。那么我們就需要有一個水果的類。既然如此,我們就定義一個水果的類:
Class Fruit{
String name;
public Fruit(String name){
this.name=name;
}
}
水果定義完了,接下來我們new一個List并初始化:
public initList(){ListFruits = new ArrayList();
Fruit apple = new Fruit("Apple", R.drawable.apple_pic);
Fruits.add(apple);
Fruit banana = new Fruit("Banana", R.drawable.banana_pic);
Fruits.add(banana);
Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);
Fruits.add(cherry);
Fruit grape = new Fruit("Grape", R.drawable.grape_pic);
Fruits.add(grape);
Fruit mango = new Fruit("Mango", R.drawable.mango_pic);
Fruits.add(mango);
Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
Fruits.add(orange);
Fruit pear = new Fruit("Pear", R.drawable.pear_pic);
Fruits.add(pear);
Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);
Fruits.add(pineapple);
Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);
Fruits.add(strawberry);
Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);
Fruits.add(watermelon);
}
好的,到此為止我們的List已經new好了,并且里面也有了值,接下來就要解決Adapt的問題了。Adapt是一個抽象類,不能直接new出對象,我們需要定義一個自己的Adpat類,并實現具體的方法,具體代碼如下:
public class FruitAdapt extends RecyclerView.Adapter<FruitAdapt.MyHolder> {
List<Fruit> Fruits;
public FruitAdapt(List<Fruit> Fruits){
this.Fruits=Fruits;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_view,parent,false);
//將之前寫好的list_view封裝到一個View中
MyHolder holder=new MyHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyHolder holder, int position) {
Fruit fruit=Fruits.get(position);
holder.imageView.setImageResource(fruit.image);
holder.textView.setText(fruit.name);
}
@Override
public int getItemCount() {
return Fruits.size();
}
class MyHolder extends RecyclerView.ViewHolder{
ImageView imageView;
TextView textView;
public MyHolder(View itemView) {
super(itemView);
textView=(TextView)itemView.findViewById(R.id.textview);
imageView=(ImageView) itemView.findViewById(R.id.imageview);
}
}
}
現在List已經有了,MyAdapt也已經有了,接下來就需要在MainActivity中建立兩者之間的關聯就可以了:
RecyclerView recyclerView;
List<Fruit> Fruits=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
recyclerView=(RecyclerView)findViewById(R.id.recycler);
LinearLayoutManager layoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
//設置LayoutManager
FruitAdapt adapt=new FruitAdapt(Fruits);
recyclerView.setAdapter(adapt);
}
值得一提的是,在ListView中,我們之間將兩者關聯起來就好了,但是在RecyclerView中,還需要再加一步,就是將RecyclerView的對象設置一下Layout,具體代碼如以上分離的部分,這是ListView與RecyclerView的不同之處。
好的,接下來運行一下,你的是不是已經成功了?