作為一個(gè)Android Studio的初學(xué)者肖揣,第一次使用簡(jiǎn)書發(fā)布文章痹筛,如有錯(cuò)誤,還請(qǐng)見諒捂寿。
今天將通過(guò)一個(gè)案例來(lái)為大家介紹RecyclerView的用法,下面是案例完成的圖片:
我們的最終目的就是要將一個(gè)個(gè)的對(duì)象在RecycleView中顯示出來(lái)孵运,那么我們首先需要的就是一個(gè)RecycleView的對(duì)象秦陋,那么第一步就是在activity_main.xml中創(chuàng)建一個(gè)RecycleView的對(duì)象,并且高和寬都設(shè)置為填充父窗體:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
現(xiàn)在已經(jīng)有了RecycleView的對(duì)象了治笨,RecycleView是一條一條的內(nèi)容驳概,每一條相當(dāng)于一個(gè)木板,我們希望它能表示成前面是一個(gè)圖片旷赖,后面是一行文字的格式顺又,那么我們就需要再定義一個(gè)list_view.xml文件當(dāng)作格式:
<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>
接下來(lái)就要考慮怎么把我們的水果在Recycle View中顯示。我們有一個(gè)類——Adapt類等孵,這是一個(gè)抽象類稚照,它可以作為RecycleView與List之間的一個(gè)中介,簡(jiǎn)單說(shuō)就是將List中的對(duì)象一個(gè)一個(gè)地拿出來(lái),再一個(gè)一個(gè)地加入到RecycleView中去果录。我們可以先new一個(gè)List上枕,List需要范型,這就需要我們手動(dòng)添加一個(gè)范型弱恒,到底添加什么范型呢辨萍?我們可以這樣想,我們想讓RecyclerView中的每一欄都顯示一種水果斤彼,那么我們可不可以一種水果為單位分瘦,List中放的是許多種水果,Adapt將List中的水果取出加入到RecyclerView中去琉苇。那么我們就需要有一個(gè)水果的類嘲玫。既然如此,我們就定義一個(gè)水果的類:
Class Fruit{
String name;
public Fruit(String name){
this.name=name;
}
}
水果定義完了并扇,接下來(lái)我們new一個(gè)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已經(jīng)new好了,并且里面也有了值穷蛹,接下來(lái)就要解決Adapt的問(wèn)題了土陪。Adapt是一個(gè)抽象類,不能直接new出對(duì)象肴熏,我們需要定義一個(gè)自己的Adpat類鬼雀,并實(shí)現(xiàn)具體的方法,具體代碼如下:
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封裝到一個(gè)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);
}
}
}
現(xiàn)在List已經(jīng)有了蛙吏,MyAdapt也已經(jīng)有了源哩,接下來(lái)就需要在MainActivity中建立兩者之間的關(guān)聯(lián)就可以了:
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);
//設(shè)置LayoutManager
FruitAdapt adapt=new FruitAdapt(Fruits);
recyclerView.setAdapter(adapt);
}
值得一提的是,在ListView中鸦做,我們之間將兩者關(guān)聯(lián)起來(lái)就好了励烦,但是在RecyclerView中,還需要再加一步泼诱,就是將RecyclerView的對(duì)象設(shè)置一下Layout坛掠,具體代碼如以上分離的部分,這是ListView與RecyclerView的不同之處治筒。
好的屉栓,接下來(lái)運(yùn)行一下,你的是不是已經(jīng)成功了耸袜?