1.新建一個工程失乾,點擊設(shè)置,找到dependencies,導(dǎo)入RecyclerVeiw
2.編寫布局文件:
2.1 這個為recycler整體的布局
<android.support.v7.widget.RecyclerView
? ? android:id="@+id/recyclerview_layout1"
? ? android:layout_width="match_parent"
? ? android:layout_height="150dp">
</android.support.v7.widget.RecyclerView>
2.2 這個為recycler每一個item的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
? ? android:layout_width="match_parent"
? ? android:layout_height="wrap_content"
? ? android:orientation="vertical"
? ? android:gravity="center"
? ? >
? ? ? ? android:id="@+id/recyclerviewimg1"
? ? ? ? android:layout_width="100dp"
? ? ? ? android:layout_height="70dp"
? ? ? ? android:src="@drawable/fruit1"
? ? ? ? android:scaleType="fitXY"
? ? ? ? />
? ? ? ? android:id="@+id/recyclerviewtext_1"
? ? ? ? android:layout_width="wrap_content"
? ? ? ? android:layout_height="wrap_content"
? ? ? android:layout_gravity="center"
? ? ? ? android:text="水果" />
</LinearLayout>
3.初始化數(shù)據(jù)谋币,這個方法為集合填充數(shù)據(jù)得方法仗扬,其中g(shù)etRandomNumber為得到一個隨機(jī)的數(shù)據(jù)
public void initrecyclergrid(){
for(int i=0;i<5;i++){
Fruit fruit1 =new Fruit(getRandomNumber("111"),R.drawable.fruit1);
? ? ? ? mFruits2.add(fruit1);
? ? ? ? Fruit fruit2 =new Fruit(getRandomNumber("222"),R.drawable.fruit2);
? ? ? ? mFruits2.add(fruit2);
? ? ? ? Fruit fruit3 =new Fruit(getRandomNumber("333"),R.drawable.fruit3);
? ? ? ? mFruits2.add(fruit3);
? ? ? ? Fruit fruit4 =new Fruit(getRandomNumber("444"),R.drawable.fruit4);
? ? ? ? mFruits2.add(fruit4);
? ? ? ? Fruit fruit5 =new Fruit(getRandomNumber("555"),R.drawable.fruit5);
? ? ? ? mFruits2.add(fruit5);
? ? ? ? Fruit fruit6 =new Fruit(getRandomNumber("666"),R.drawable.fruit6);
? ? ? ? mFruits2.add(fruit6);
? ? ? ? Fruit fruit7 =new Fruit(getRandomNumber("777"),R.drawable.fruit7);
? ? ? ? mFruits2.add(fruit7);
? ? }
}
public Stringget RandomNumber(String name){
Random random =new Random();
? ? int length = random.nextInt(20)+1;
? ? StringBuilder builder =new StringBuilder();
? ? for(int i=0;i
builder.append(name);
? ? }
return builder.toString();
}
4.建立Recyclerview的適配器
public class RecyclerviewAdapter2 extends RecyclerView.Adapter{
/**
* 1.
* 傳入上下文對象是因為有彈出提示
* 集合即為列表要顯示的數(shù)據(jù)
*/
? ? private ListmFruits =new ArrayList<>();
? ? private ContextmContext;
? ? public RecyclerviewAdapter2(Context context, List list) {
this.mContext = context;
? ? ? ? this.mFruits = list;
? ? }
/**
* 2. 創(chuàng)建ViewHolder 繼承自RecyclerView.ViewHolder,用來優(yōu)化列表的顯示蕾额,
*
? ? * @param viewGroup
? ? * @param i
? ? * @return
? ? *
* 加載item布局,為布局中的元素設(shè)置監(jiān)聽
*
*/
? ? @NonNull
@Override
? ? public ViewHolderonCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
// 加載 item 的布局彼城,將其傳遞給ViewHolder诅蝶,優(yōu)化列表调炬,減少加載item和找到對應(yīng)布局id時間缰泡,實現(xiàn)復(fù)用
? ? ? ? View view = LayoutInflater.from(mContext).inflate(R.layout.recycler_gridviewitem,viewGroup,false);
? ? ? ? final ViewHolder holder =new ViewHolder(view);
? ? ? ? //為
? ? ? ? holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
? ? ? ? ? ? public void onClick(View view) {
int position =holder.getAdapterPosition();
? ? ? ? ? ? ? ? Toast.makeText(view.getContext(),"你點擊了"+mFruits.get(position).getThing(),Toast.LENGTH_SHORT).show();
? ? ? ? ? ? }
});
? ? ? ? holder.mImageView.setOnClickListener(new View.OnClickListener() {
@Override
? ? ? ? ? ? public void onClick(View view) {
int position =holder.getAdapterPosition();
? ? ? ? ? ? ? ? Toast.makeText(view.getContext(),"你點擊了圖片"+mFruits.get(position).getThing(),Toast.LENGTH_SHORT).show();
? ? ? ? ? ? }
});
? ? ? ? return holder;
? ? }
/**
*? 3.
? ? * @param viewHolder
? ? * @param i
? ? *
* 為將數(shù)據(jù)賦值給item
*/
? ? @Override
? ? public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
Fruit fruit =mFruits.get(i);
? ? ? ? viewHolder.mImageView.setImageResource(fruit.getIcon());
? ? ? ? viewHolder.tv_1.setText(fruit.getThing());
? ? }
// 返回集合的大小
? ? @Override
? ? public int getItemCount() {
return mFruits.size();
? ? }
/**
* 創(chuàng)建ViewHolder 用來優(yōu)化布局
*/
? ? class ViewHolderextends RecyclerView.ViewHolder{
ViewmView;
? ? ? ? ImageViewmImageView;
? ? ? ? TextViewtv_1;
? ? ? ? public ViewHolder(@NonNull View itemView) {
super(itemView);
? ? ? ? ? ? mView = itemView;
? ? ? ? ? ? mImageView = itemView.findViewById(R.id.recyclerviewimg1);
? ? ? ? ? ? tv_1 = itemView.findViewById(R.id.recyclerviewtext_1);
? ? ? ? }
}
}
5.為RecyclerView設(shè)置適配器
public class RecyclerviewActivityextends AppCompatActivity {
private ListmFruits =new ArrayList<>();
? ? private ListmFruits2 =new ArrayList<>();
? ? private RecyclerViewmRecyclerView,recyclerview_layout1,recyclerview_layout2;
? ? @Override
? ? protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_recyclerview);
? ? ? ? initFruits();
? ? ? ? initrecyclergrid();
? ? ? ? mRecyclerView = findViewById(R.id.recyclerview_layout);
? ? ? ? recyclerview_layout1 = findViewById(R.id.recyclerview_layout1);
? ? ? ? recyclerview_layout2 = findViewById(R.id.recyclerview_layout2);
? ? ? ? LinearLayoutManager layoutManager =new LinearLayoutManager(this);
? ? ? ? layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
//? ? ? ? 上一行代碼設(shè)為水平的
? ? ? ? mRecyclerView.setLayoutManager(layoutManager);
//? ? ? ? 設(shè)置recyclerview為九宮格顯示干毅,其中 3 表示為3列
? ? ? ? GridLayoutManager gridLayoutManager =new GridLayoutManager(this,3);
? ? ? ? recyclerview_layout1.setLayoutManager(gridLayoutManager);
//? ? ? ? 設(shè)置recyclerview的顯示為瀑布流形式
? ? ? ? StaggeredGridLayoutManager staggeredGridLayoutManager =new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
? ? ? ? recyclerview_layout2.setLayoutManager(staggeredGridLayoutManager);
? ? ? ? // 設(shè)置設(shè)配器
? ? ? ? RecyclerviewAdapter adapter =new RecyclerviewAdapter(RecyclerviewActivity.this,mFruits);
? ? ? ? mRecyclerView.setAdapter(adapter);
? ? ? ? recyclerview_layout1.setAdapter(adapter);
? ? ? ? recyclerview_layout2.setAdapter(adapter);
? ? }
注:
其中recyclerView顯示形式的不同硝逢,主要是LayoutManager(布局管理器)的不同渠鸽,由于截圖工具不方便編輯徽缚,文章主要用于自己的筆記,有不明白的歡迎留言