2016-03-16 14 views
5

Web sitelerinden dersler almak için RecyclerView ve CardView kullanarak temel bir uygulama oluşturdum.RecyclerView kavramı, android üzerinde nasıl çalışır?

App iyi çalışıyor ve ben biraz kafa karışıklığı var.

karışıklık kod adım adım nasıl çalıştığını olmasıdır (burada benim bütün kodu gösteriyorum). lütfen bunun üzerine konseptimi temizleyin. Benim App

Temel Yapısı:

1) I have create an row_data_layout xml file to bind on recycler_view. 
2) Created an Data class file(Here i defined my variable that i used in App) 
2) Created an Adapter file (here i want to clear how it goes work step by step first which class call and why ?). 
3) Bind Data to Recycler View on MainActivity file 

row_data_layout.xml dosyası:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/CardView" 
    android:paddingBottom="16dp" 
    android:layout_marginBottom="16dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/txt_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:text="Large Text" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 
    </LinearLayout> 

</android.support.v7.widget.CardView> 

Veri Sınıf Dosyası:

public class Data { 
    public String Name; 

    Data(String Name) 
    { 
     this.Name=Name; 
    } 
} 

Data_Adapter Sınıf dosyası:

public class Data_Adapter extends RecyclerView.Adapter<Data_Adapter.View_holder> { 
    List<Data> list = Collections.emptyList(); 
    Context context; 

    public Data_Adapter(List<Data> list, Context context) { 
     this.list = list; 
     this.context = context; 
    } 

    @Override 
    public Data_Adapter.View_holder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_data_layout,parent,false); 
     View_holder holder=new View_holder(v); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(Data_Adapter.View_holder holder, int position) { 
      holder.name.setText(list.get(position).Name); 
    } 

    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    public class View_holder extends RecyclerView.ViewHolder{ 
     CardView cv; 
     TextView name; 

     public View_holder(View itemView) { 
      super(itemView); 
      cv = (CardView) itemView.findViewById(R.id.CardView); 
      name = (TextView) itemView.findViewById(R.id.txt_name); 
     } 
    } 
} 

MainActivity Dosya: Bir RecyclerView.Adapter nasıl çalıştığını temel bir anlayışa sahip olduktan sonra

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     List<Data> data = fill_data(); 
     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
     Data_Adapter adapter = new Data_Adapter(data,getApplicationContext()); 
     recyclerView.setAdapter(adapter); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    } 

    public List<Data> fill_data() 
    { 
     List<Data> data = new ArrayList<>(); 
     data.add(new Data("Bred Pit")); 
     data.add(new Data("Leonardo")); 

     return data; 
    } 
} 
+0

Lütfen sorularınızı açıklayınız. – natario

+0

Adpater'ın adım adım nasıl çalıştığını bilmek istiyorum –

cevap

19

, bu documentation içine daha derin bir düşüş yaşanması mantıklıdır.

Bağdaştırıcı, şişirilmiş görünüm havuzunu (bu, istediğiniz differentViewHolder türünü olabildiğince istediğiniz gibi) sağladığınız verilerle dolduracaktır. Adaptör havuzda boş bir görünüme sahip olmadığında, yeni bir tane oluşturur.

Bir görünüm RecyclerView'a eklendiğinde, havuzdan kaldırılır ve çıkarıldığında (görünümün ötesine kaydırılır, biraz mesafeye kaydırılır), bu, boş görünümler havuzuna eklenir - bu yüzden ViewHolders'ınızı yerleştirdiğinizde her şeyi sıfırlamak önemlidir.

onCreateViewHolder() işlevi, yeni, boş bir görünümün (RecyclerView.ViewHolder tarafından sarılmış) oluşturulduğu ve havuza eklendiği yerdir.

onBindViewHolder() işlevi boş havuzdan bir görünüm alır ve adaptöre verilen verileri kullanarak bu görüşü doldurur. \

null bir ImageView'ın bitmap ayarı gibi belirli eylemleri gerçekleştirmek için onViewRecycled() yöntemi kullanabilirsiniz (bellek kullanımını azaltmak için detach).

Normalde onAttachedToRecyclerView()'u geçersiz kılmıyorum, ancak bağdaştırıcınız RecyclerView ile ilişkilendirildiğinde belirli bir şey yapmanız gerekiyorsa, bunu burada yaparsınız.

+1

Bu yardımcı bir açıklamadır. Teşekkür ederim. İlk önce "boş" terimi ile beni attı ama şimdi anlamını kazandığımı düşünüyorum. Doğru anlıyorsam, "boş", genel bir GUI nesnesi, ör. XML açıklamasından oluşturulmuş ancak herhangi bir ayırt edici veriyle doldurulmayan pencere öğesi. İfadeyi affederseniz, çalışma zamanı şablonunun sıralaması. – orodbhen

+0

Düzelt, boş, henüz veri girilmemiş şişmiş bir görünümdür (veya hiyerarşiyi görüntüler). Adaptör, bunların (kullanılmış ve/veya kullanılmamış) bir havuzunu geri dönüştürmesini sağlar - gerektiğinde daha fazla şişer. – wblaschko

İlgili konular