2016-04-12 28 views
4

Bir barikata biraz vurup nasıl çözeceğimi merak ediyorum, bana tavuk ve yumurta gibi gözüküyor, taze bir çift gözle yapabilirdi.Farklı görünümü gösterme Veritabanındaki bilgilere göre RecyclerViewView?

İçindekiler hakkında bilgi içeren bir veritabanım var. RecyclerView adresindeki mesafeye göre sıralanmış tüm yerleri göstermek istiyorum.

Bu, zaten bir tane yalnızca viewType olduğunda bunu başardım. Ancak bu benim anlayamadığım şey, kullanıcıya belli bir mesafede olan yerler için farklı bir manzara göstermek istiyorum. Yani örneğin 100meters içinde.

Bu bilgi benim veritabanımın içinde, yani getItemViewType(int position) setAdapter() benim CursorLoader çağrıldığında tüm bilgileri dışarı çekmeyi tamamlamamış, böylece boş bir işaretçi istisnası olsun. Soruma için

:

benim CursorLoader sonra bitirmek benim adaptör ile çalışmak ve bir null Cursor yok etmek için beklememi için bir yol var mı? Yükleyici bittikten sonra .setAdapter()'u aramayı denediğimde, günlüklerimde aşağıdakileri aldım: , RecyclerView etkinliğin oluşturulduğunda ayarlanacak adaptöre ihtiyaç duyuyor.

Benim getItemViewType(position) anda şöyle görünür:

if (!cursor.isClosed()) { 
    cursor.moveToPosition(position); 
} 
if (cursor.getInt(2) <= 100) { 
    return TYPE_NEARBY; 
} else { 
    return TYPE_NOT_NEARBY; 
} 

Esasen ben viewType belirlemek için benim CursorLoader verileri kullanmak ve bu hücre için farklı bir görünüm yüklemeniz gerekir. Bir ViewType ile çalışır çünkü mesafeyi kontrol etmem gerekmiyor, hepsi aynı manzaraya sahip.

Sunduğunuz her türlü yardım için teşekkür ederiz!

+1

'getItemViewType',' getItemCount' '0' döndürürse çağrılmamalıdır; bu, imleciniz boşsa, durum böyle olmalıdır. – Blackbelt

+0

Sadece kesme noktaları ile koştum ve haklısın. Bu çağrıldığında, onBindViewHolder üzerindeki kimlikleri güncelleyerek çalıştım. imleci pozisyona getirin ve görüntüleyicimi güncellemek için tekrar kontrol edin. Sanırım, görüntüleyicimde de güncellenmesi gereken bir tutucu kullanıyorum. –

cevap

0

Bu çalışmayı sonuçta, karabelekler yorumu sayesinde aldım.

İşlemi hata ayıklama modunda gerçekleştirir ve her şey beklendiği gibi çalışır. Sadece onBindViewHolder(int position)'umdaki verilerle doğru şeyleri yaptığımdan emin olmalıydım.

Ana sorun, ViewHolder'ımda viewType int'mden farklı bir "holderId" int'm vardı, bu yüzden muhtemelen onları yalnızca karıştırdım.