RecyclerView اندروید

308

0

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();
    }
}

خروجی نهایی :

ریسایکلرویو
ریسایکلرویو

alendoor

مهندس مکانیک | برنامه نویس

1سال در کنار تاتژن

اشتراک
اطلاع از
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x