2012-06-05 16 views
5

nedeniyle burada başka bir cevaba bu soruyu alıyorum ama How to get the id of the row in onItemClick(ListView) when using a custom Adapter?Nasıl CursorAdapter dan getItemId (int pos) yöntemini geçersiz kılmak?

bu soruya kabul edilen cevap soruyorum neyi nasıl izah etmedi ben de yapıyorum çünkü ihtiyacım olan benim kendi özel bağdaştırıcısı (CursorAdapter), dolayısıyla aynı soruna sahip olacağım. Sorun şu ki, bunu nasıl başaracağımı bilmiyorum. Doktora bakıyorum ve imleçten _id sütununa nasıl erişileceğinden emin değilim. Doküman bu bilgiyi elde edebileceğimiz sabit değere sahip olmadığı için sıkışıp kaldım. Bunu anlamak için herhangi bir yardım çok takdir edilecektir.

DÜZENLEME: Sorularımın ne olduğu konusunda net değildim, ancak açıklığa kavuşturmak için başlıkta olduğu gibi, oluşturduğum CursorAdapter özel sınıfındaki getItemId() yöntemini nasıl geçersiz kılabilirim?

+0

ı don ... Sana bir imleç veri alırsak olurdu kullanmak ve bir dizi içerisine koyun ve sonra bir dizi adaptör kullanılan ihtiyacınız olabilecek başka bir zaman varsayalım .. ama oldukça Göbekli görünüyor 't sorununuzu anlıyorum ... ne yapmaya çalışıyorsun ve nerede almak için çalışıyoruz ... ben o geçersiz kılmak olmadı, birkaç özel imleç adaptörleri var ve ben çok güzel imleç satır kimliği almak Bu kimlik? Ben liste görünümünden bir üyeyi tıkladığınızda – Barak

+0

, ben veritabanına gidip üye bilgilere bu erişmek için bu kimliği kullanmak isterler. Bu yüzden aslında _id'i aldığımdan emin olmalıyım. Ama değilim. Eğer liste ile 'onListItemClick' kullanıyorsanız – Andy

+0

neden olmasın ... olman gereken görme ilgi duyarım. – Barak

cevap

9

Eğer Adaptörü bir üyesi olarak İmleç yok varsayarsak:

@Override 
public long getItemId(int position) { 
    Cursor cursor = getCursor(); 
    cursor.moveToPosition(position); 
    return cursor.getLong(mCursor.getColumnIndex("_id")); 
} 
+0

Ahh, çağıran getCursor, CursorAdapter'ın kullandığı ilgili imleci çağırıyor? Bunu fark etmeli! Teşekkürler – Andy

+0

Evet, işte burada [getCursor()] için bir başvuru (http://developer.android.com/reference/android/widget/CursorAdapter.html#getCursor%28%29) – Sam

+0

Ve SimpleCursorAdapter değil, CursorAdapter kullanıyorsanız o zaman bu gibi newView içindeki konumu ayarlamalısınız @ @ @ @public View newView (Bağlam bağlamı, İmleç imleci, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from (parent.getContext()); tutucu.deleteImageView = (ImageView) retView.findViewById (R.id.delete); holder.deleteImageView.setTag (cursor.getPosition()); return retView; } ' – Chetna

4

Bu yöneltilen soruya cevap vermez nkow, ama Sam hallettim. Bunu yayınlayacağımı düşündüm çünkü OP'ler bölümünde kafa karışıklığı var gibi görünüyor.

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // Your code here 
} 

long id listesi ile beslenir tıklandığında satırda yer alan veriler için satır numarası (olup:

izlenerek özel bir imleç adaptörü ile oluşturulan bir listesini ihtiva eden bir aktivitesi ile ilgili bir onListItemClick yöntemdir imleç bağdaştırıcısı). getItemId'u geçersiz kılmaya gerek yok.

Yalnızca geçersiz kılmak gerekir getItemId (benim durumumda) tek bir hizaya farklı satırlardan koymak bilgiler gibi bir şey yaparsam. Sürece bir liste hattı için tüm veri veritabanında aynı satırdan olduğu gibi, bu kadar zahmete gerek yok.

+0

En azından veritabanından istediğim satır _id. Ama ne dediğini görüyorum – Andy

+0

Bu ** satır ** (veya veritabanı sütun adı açısından düşünmeyi tercih ederseniz _id). Bu yüzden, bir adaptörün beslendiği herhangi bir imleçte * _id * adında bir * gerekli * olması gereken çerçeve ... bu çerçeve onu kullanır ve bir satıra tıkladığınızda onu kullanabilmeniz için birlikte geçer. – Barak

+0

ahh. Yakaladım. giriş için teşekkürler. Çok takdir edildi. – Andy

İlgili konular