2015-04-20 26 views
15

Kategorilerin bir listesini yüklüyorum ve hangisinin seçili olduğuna bağlı olarak, ilgili kategorinin ürünlerini RecyclerView ürününe göstermem gerekiyor. Fragment'u ilk çalıştırdığımda, varsayılan bir kategoriyi tıklatarak kullanıcının benzetimini yapmam gerekir - bu durumda, ilk olanı olacaktır.Öğe tıklatılarak programa göre RecyclerView

Bunu nasıl yapabilirim?

Çok önceden teşekkürler.

cevap

16

Kodunuz olmadan, onClickListener uygulamanızı nasıl uygulayacağınızı bilmiyoruz.

Normalde, öğeyi RecyclerView.Adapter öğesinin viewHolder öğesinde uygular ve onClickListener olarak ayarlarsınız. ViewHolder.itemView.setOnClickListener(listener);

Yani çözümü recyclerView.findViewHolderForAdapterPosition(0).itemView.performClick()

PS kullanabilirsiniz edilir: Örneğin:
İşte Doc

9

göre findViewHolderForLayoutPosition() kullanmayın sadece adaptör ayarladıktan sonra recyclerview 1. çocuğu seçmek için bir çözüm bu yardımcı olacağını umuyoruz Eğer

//position to be clicked 
final int pos = 0; 
new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
recyclerView.findViewHolderForAdapterPosition(pos).itemView.performClick(); 
        } 
       },1); 

:)

zevk o docs içinde devletlerin
+1

kullanmak pozisyonda üst üste içine belirli bir görünümünü tıklayın isterseniz? – Gaket

+1

Bazen boş bir işaretçi istisnası verdiği için tıklama etkinliğinde 1 ms gecikme. – Saurabh

+0

Bu çocuk doğru ... çözülmüş null pointer istisnası –

0

O yöntemini

recyclerView.findViewHolderForAdapterPosition(pos).itemView.performClick(); 

kullanmak titiz tarafından hoş karşılanmaz:

Return the ViewHolder for the item in the given position of the data set. Unlike 
* {@link #findViewHolderForLayoutPosition(int)} this method takes into account any pending 
* adapter changes that may not be reflected to the layout yet. On the other hand, if 
* {@link Adapter#notifyDataSetChanged()} has been called but the new layout has not been 
* calculated yet, this method will return <code>null</code> since the new positions of views 
* are unknown until the layout is calculated. 

bir iplikle geciktirmede bazen yararlı olduğunu tam olarak nedenle. NotifyDataSetChanged() öğesine yapılan herhangi bir çağrı, null döndürmesine neden olur. Bağdaştırıcı yöntemini onBindViewHolder'da kullanmak ve konum 0'ı kontrol etmek daha iyidir. Dinleyicinizi nasıl ayarlayacağınıza göre ayarlama yapın, örneğin ViewHolder yapıcısında oluşturulan usual way örneğidir. yine aradı engellemek için init değişkeni kullanın:

@Override 
    public void onBindViewHolder(FooAdapter.ViewHolder viewHolder, int position) { 
    //code 
    ... 
    //do this last especially if you are using an animator 

    if(position == 0 && isInit) { 
     listener.onItemClick(viewHolder.itemView,0); 
     isInit =false; 

    } 
    } 
0

sonra niye buraya işleyicisi kullanmak önerirsiniz

recyclerView.findViewHolderForAdapterPosition(pos).itemView.findViewById(R.id.view_id).performClick(); 
İlgili konular