RecyclerView
參考:《第一行代碼》第二版——郭霖
可以用RecyclerView來顯示多行串列,
recycle 回圈回收再利用,
通過一個水果串列來學習RecyclerView
-
準備作業,在app/build.gradle檔案中匯入依賴
dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.1' implementation 'androidx.recyclerview:recyclerview:1.0.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }可以看到recyclerview在androidx里,
-
首先構建一個水果類,其中包括了要顯示的水果內容——名稱與圖片
Fruit.javapackage com.chinabird.recycler; 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 void setName(String name) { this.name = name; } public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } } -
在xml檔案中加入Recyclerview,相當于容器裝東西
activity_main.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="match_parent"> <!--寫入完整包名--> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> -
寫出fruit的xml布局,要顯示的串列樣式
fruit_item.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <!--水果圖片--> <ImageView android:id="@+id/fruit_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!--水果名稱--> <TextView android:id="@+id/fruit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginTop="10dp"/> </LinearLayout> -
為RecyclerVirew準備一個配接器,適配的是fruit_item
package com.example.recycler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.List; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; /** * 繼承自RecyclerView.Adapter實作類,泛型是其內部類 */ public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { /*全域Friut的List陣列*/ private List<Fruit> mFruitList; /** * 構造器 */ public FruitAdapter(List<Fruit> mFruitList) { this.mFruitList = mFruitList; } /** * 內部類也繼承其內部類,并重寫構造器 */ static class ViewHolder extends RecyclerView.ViewHolder { ImageView fruitImage; TextView fruitName; /** * 內部類構造器 * * @param view Recycler子項的最外層布局 */ public ViewHolder(View view) { super(view); fruitImage = view.findViewById(R.id.fruit_image); fruitName = view.findViewById(R.id.fruit_name); } } /*第二個被回呼,創建一個ViewHolder物件回傳*/ @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { /*加載水果布局*/ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false); /*布局傳遞到內部類的建構式中*/ ViewHolder holder = new ViewHolder(view); /*回傳內部類物件*/ return holder; } /** * 子項資料賦值,通過這個方法實作滑動添加,第三個被回呼 * * @param holder * @param position */ @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { /*得到當前fruit*/ Fruit fruit = mFruitList.get(position); /*更改圖片*/ holder.fruitImage.setImageResource(fruit.getImageId()); /*更改文字*/ holder.fruitName.setText(fruit.getName()); } /** * @return 獲取長度,第一個被回呼 */ @Overrde public int getItemCount() { return mFruitList.size(); } } -
在MainActivity中進行Recycler的顯示,并呼叫配接器填充內容
package com.example.recycler; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private List<Fruit> mFruitList = new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits(); /*找到activity_main.xml中的recyclerView*/ RecyclerView recyclerView = findViewById(R.id.recycler_view); /*指定RecyclerView布局方式*/ LinearLayoutManager layoutManager = new LinearLayoutManager(this); /*指定為LinearLayout布局*/ recyclerView.setLayoutManager(layoutManager); /*適配去管理滑動顯示*/ FruitAdapter adapter = new FruitAdapter(mFruitList); /*設定適配*/ recyclerView.setAdapter(adapter); } /** * 初始化40個蘋果陣列 */ private void initFruits(){ for (int i = 0; i < 40; i++) { Fruit apple = new Fruit("Apple" + i, R.mipmap.ic_launcher); mFruitList.add(apple); } } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/292075.html
標籤:其他
上一篇:獲取和檢測android的父行程
