Sobes.tech
Junior

დაწვრილებით ახსენით, რა არის RecyclerView.

sobes.tech AI

პასუხი AI-სგან

RecyclerView — սա ավելի ճկուն և արդյունավետ տարբերակ է հնացած ListView և GridView-ի համար: Այն նախատեսված է մեծ քանակությամբ տվյալների արդյունավետ ցուցադրման համար՝ վերօգտագործելով View-մասինները սքրոլինգի ժամանակ:

Հիմնական բաղադրիչները:

  • Adapter: կապում է տվյալները ViewHolder-ի հետ և կառավարում View-ների ստեղծումը և կապակցումը:
  • ViewHolder: օղակ է յուրաքանչյուր ցանկի տարրերի շուրջ: պահում է հղումներ յուրաքանչյուր տարրի View-ների վրա՝ findViewById-ի ռեսուրսային բեռը նվազեցնելու համար:
  • LayoutManager: որոշում է, թե ինչպես դասավորել տարրերը ցանկում՝ գծային, ցանցային և այլն:
  • ItemAnimator: որոշում է անիմացիաները տարրերի ավելացման, հեռացման կամ փոփոխության ժամանակ:
  • ItemDecoration: ավելացնում է դեկորացիաներ ցանկի տարրերին՝ օրինակ՝ բաժանարարներ:

Աշխատանքի սկզբունքը:

RecyclerView-ը չի ստեղծում View բոլոր տվյալների համար միանգամից: Փոխարենը, այն ստեղծում է սահմանափակ քանակությամբ ViewHolder, որոնք բավարար են տեսանելի մասի համար: Սքրոլдоо ժամանակ, անտեսանելի ViewHolder-ները վերածվում են պուլի՝ վերօգտագործման համար: Երբ նոր տարր է դառնում տեսանելի, RecyclerView-ը վերցնում է ViewHolder-ը պուլից (կամ ստեղծում է նոր, եթե պուլը դատարկ է), կանչում է onBindViewHolder() մեթոդը՝ թարմացնելու համար ViewHolder-ի պարունակությունը նոր տվյալներով և ցուցադրելու:

Առավելությունները:

  • Հիշողության արդյունավետ օգտագործում: ViewHolder-ի վերօգտագործումը նվազեցնում է ստեղծվող View-ների քանակը:
  • Արդյունավետություն: findViewById-ի գործողությունների քանակը նվազում է, ռեսուրսների արդյունավետ օգտագործում:
  • Իյկեմդүүлություն: բաժանված կոմպոնենտներ (LayoutManager, ItemAnimator, ItemDecoration) հեշտ են հարմարեցնելու ցանկի վարքագիծը և տեսքը:
  • Անիմացիաների աջակցություն ըստ նախնական կարգավորումների: Դիմում է անիմացիաներ տվյալների փոփոխությունների ժամանակ:
  • Տարբեր մոդելների աջակցություն: Լավ է իրականացնել ցանկեր, ցանցեր, կարուսելներ և այլ դասավորություններ:

Կոմպլեքսության թերությունները:

  • Ավելի բարդ է, քան ListView, քանի որ պահանջում է ViewHolder-ի իրականացում և աշխատում է ադապտերով:

Իմպլեմենտացիայի օրինակ:

  1. XML-формատ:

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    
  2. ViewHolder-ի ստեղծում:

    // MyViewHolder.java
    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView textView;
    
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.item_text); // Օրինակ՝ գտել ենք TextView-ը տարրերի ձևաչափում
        }
    }
    

    Որտեղ R.id.item_text-ը ID TextView-ի՝ մեկ տողի մեջ:

  3. Adapter-ի ստեղծում:

    // MyAdapter.java
    public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
        private List<String> dataList;
    
        public MyAdapter(List<String> dataList) {
            this.dataList = dataList;
        }
    
        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item_layout, parent, false);
            return new MyViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            String data = dataList.get(position);
            holder.textView.setText(data);
        }
    
        @Override
        public int getItemCount() {
            return dataList.size();
        }
    }
    

    R.layout.list_item_layout — XML ձևաչափ է մեկ տարրի համար:

  4. Activity/Fragment-ում կարգավորումը:

    // MyActivity.java կամ MyFragment.java
    RecyclerView recyclerView = findViewById(R.id.my_recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    List<String> myData = new ArrayList<>();
    // Տվյալների լրացում
    MyAdapter adapter = new MyAdapter(myData);
    recyclerView.setAdapter(adapter);
    

RecyclerView-ը կարևոր կոմպոնենտ է արդյունավետ ցուցակների ցուցադրման համար ժամանակակից Android հավելվածներում: Նրա կառուցվածքը և աշխատանքային սկզբունքները հասկանալը անհրաժեշտ է բարձր արդյունավետության օգտվողի ինտերֆեյսներ ստեղծելու համար։