امروز برای شما تاتژنی های عزیز، آموزش جذاب RecyclerView اندروید را تداریک دیده ایم. در ادامه با ما همراه باشید.
ویجت RecyclerView اندروید چیست؟
اندروید در ورژن 5.0 خود از ویجت جدیدی به نام RecyclerView رونمایی کرد، که یک ViewGroup جدید است و آماده ارائه هر نمایه مبتنی بر آداپتور به شیوهای مشابه است. RecyclerView با گسترش در ذهن طراحی شده است. بنابراین امکان ایجاد هر گونه طرح که می توانید از آن استفاده کنید را برای شما فراهم می کند. شما اگر می خواهید از یک RecyclerView استفاده کنید، باید سه عنصر RecyclerView.Adapter وLayoutManager و ItemAnimator را بشناسید، که در ادامه به توضیح این عناصر خواهیم پرداخت.
RecyclerView.Adapter
ریسایکلر ویو شامل یک نوع جدید از آداپتور است. این یک رویکرد مشابه با آن هایی دارد که شما قبلا استفاده کرده اید، اما دارای برخی از ویژگی های خاص مانند ViewHolder مورد نیاز است. دو ایده اصلی در RecyclerView.Adapter وجود دارد که در اولی برای نمایش و نگهدارنده، دید خود را توسعه می دهد و دیگری اینکه برای اتصال داده ها به دیدگاه استفاده می شود. نکته قابل توجه این است که روش اول تنها زمانی مورد استفاده قرار می گیرد که ما واقعا نیاز به ایجاد یک دیدگاه جدید داریم.
LayoutManager
این کلاس است که تصمیم می گیرد در چه قسمتی از صفحه قرار داده شود و این تنها یکی از مسئولیت های مهم LayoutManager است. LayoutManager باید قادر به مدیریت پیمایش و بازیافت در میان دیگران باشد. تنها یک کلاس اجرا شده از LayoutManger وجود دارد کهLinear LayoutManger نامیده می شود، و بیش از 1500 خط کد دارد که برای درک پیچیدگی توسط شما است. در LayoutManger مدیر قادر به شبیه سازی ListView (هر دو عمودی و افقی) بدون هدر یا پاورقی است. زیر کلاس های LayoutManger برای همه تازه کارها نیست و ما باید به جامعه تکیه کنیم تا بتوانیم پتانسیل کامل ریسایکلر ویو را بدست آوریم.
ItemAnimator
ItemAnimator تغییرات ViewGroup را که به آداپتور اطلاع داده می شوند را تحریک می کند. اساسا ItemAnimator به طور خودکار موارد اضافه را تحریک و تشویق می کند و بعضی از آیتم ها را حذف می کند. این یک کلاس آسان نیست و ما یک DefaultItemAnimator را باید پیدا کنیم که به خوبی کار کند.
با مثالی ساده شروع می کنیم :
خطهای زیر را به فایل gradle.build اضافه کنید :
implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0'
سپس خطوط زیر را به فایل activity_main.xml اضافه می کنیم.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rvAnimals" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
شما صفحه اصلی را طراحی کردید در مرحله بعد صفحه هر المان لیست را طراحی می کنیم. کدهای زیر را به فایل recyclerview_row.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" android:orientation="horizontal" android:padding="10dp"> <TextView android:id="@+id/tvAnimalName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp"/> </LinearLayout>
در مرحله بعد لازم است تا آداپتر را برنامه نویسی کنید.
آداپتر فایلی است که شامل کدهای اتصال کلاس اصلی و به منظور همگام سازی صفحات xml طراحی شده است.
کدهای زیر را به فایل MyRecyclerViewAdapter.java اضافه کنید؛
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> { private List<String> mData; private LayoutInflater mInflater; private ItemClickListener mClickListener; // data is passed into the constructor MyRecyclerViewAdapter(Context context, List<String> data) { this.mInflater = LayoutInflater.from(context); this.mData = data; } // inflates the row layout from xml when needed @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.recyclerview_row, parent, false); return new ViewHolder(view); } // binds the data to the TextView in each row @Override public void onBindViewHolder(ViewHolder holder, int position) { String animal = mData.get(position); holder.myTextView.setText(animal); } // total number of rows @Override public int getItemCount() { return mData.size(); } // stores and recycles views as they are scrolled off screen public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView myTextView; ViewHolder(View itemView) { super(itemView); myTextView = itemView.findViewById(R.id.tvAnimalName); itemView.setOnClickListener(this); } @Override public void onClick(View view) { if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition()); } } // convenience method for getting data at click position String getItem(int id) { return mData.get(id); } // allows clicks events to be caught void setClickListener(ItemClickListener itemClickListener) { this.mClickListener = itemClickListener; } // parent activity will implement this method to respond to click events public interface ItemClickListener { void onItemClick(View view, int position); } }
در مرحله بعد و پایانی به سراغ فایل اصلی خود می رویم و کدهای زیر را به فایل اصلی خود یعنی MainActivity.java اضافه می کنیم:
public class MainActivity extends AppCompatActivity implements MyRecyclerViewAdapter.ItemClickListener { MyRecyclerViewAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // data to populate the RecyclerView with ArrayList<String> animalNames = new ArrayList<>(); animalNames.add("Horse"); animalNames.add("Cow"); animalNames.add("Camel"); animalNames.add("Sheep"); animalNames.add("Goat"); // set up the RecyclerView RecyclerView recyclerView = findViewById(R.id.rvAnimals); recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new MyRecyclerViewAdapter(this, animalNames); adapter.setClickListener(this); recyclerView.setAdapter(adapter); } @Override public void onItemClick(View view, int position) { Toast.makeText(this, "You clicked " + adapter.getItem(position) + " on row number " + position, Toast.LENGTH_SHORT).show(); } }
خروجی نهایی :
به پایان این آموزش جذاب رسیدیم. چنانچه ابهام و اشکالی داشتید، می توانید در بخش کامنت ها مطرح نمایید.