2012-07-26 24 views
6

Bir imlecin geçerli kaydı almak istiyorum içine İmleç gelen verileri almak için.nasıl bir bağlam menüsünü manipüle böylece yerine kimliği, ContextMenu

Sana nasıl kimliğini almak için gösteren bu örnek here gördük: benim yazmak için izin verecektir tıklanan içerik menüsüne uygun SQLite veritabanı kimliği almak için beni tanır çünkü

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case DELETE_ID: 
     AdapterView.AdapterContextMenuInfo info= 
      (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 

     delete(info.id); 
     return(true); 
    } 

    return(super.onOptionsItemSelected(item)); 
    } 

bu harika Bir arama yapmak için bir işlev. Ama kesinlikle mevcut imleci tekrar kullanabilir miyim?

bunu yaparken çalıştı:

Cursor c = (Cursor) this.getListAdapter().getItem((int) info.id); 
String itemPriority = c.getInt(1); 
Log.v(TAG, "Current item:" + itemPriority); 

ama imleç çizgi yerine Peşinde olduğum kaydın veritabanının sadece şema dönmek gibi görünüyor.

Birisi biraz ışık tutabilir.

DÜZENLEME: çözüm bulduk @azgolfer teşekkürler. Bağdaştırıcıyı doldurmak için bir fillData() yöntemi kullanıyorum. Normalde bu hiçbir değişken olmadan beyan edilir. Bu yöntemi bir alan değişkeniyle yeniden tanımlamak zorundaydım. onContextItemSelected içinde curstor adaptörü görünür hale getirmek için kod ilgili kısmı buradadır:

private void fillData() { 
    Cursor itemsCursor = mDbHelper.fetchAllItemsFilter(mListId, mStatusFilter); 
    startManagingCursor(itemsCursor); 
    mItemAdaptor = new ItemAdapter(this, itemsCursor); 
    this.setListAdapter(mItemAdaptor);  
} 
+0

Yeniden kullanmak demek istiyorsunuz ne

Önce kullanıcı preslenmiş ne konumunu belirlemek? Ve 'c.getInt (1)', bu imleç sırasının 1. dizisi olanı alır. Bu yüzden, sadece cursor'lar satırının diğer dizinlerinden gelen kayıtları, 'c.getString (2)' gibi. Başka bir şey yapmaya çalışmıyorsan. – Andy

+0

Maalesef, iş tekrar kullanım “kullanım” olmalıdır. Ancak nokta, imlecin sadece şema verisini döndürmemesidir. –

+0

'itemPriority' öğesini gösteren şeyi basabilir misiniz? – Andy

cevap

13

Haklısınız, liste öğeleri görüntülemek için bir CursorAdapter kullanıyorsunuz? Daha sonra, CursorAdapter'ın kendisinde getCursor() öğesini çağırarak, imleciniz zaten var. İmleçten doğru kaydı almak için, sadece öğe kullanıcısının basma konumunu almanız, ardından imleci bu konuma getirmeniz ve verilerinizi almanız gerekir.

AdapterView.AdapterContextMenuInfo info= 
     (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
int itemPosition = info.position; 

Sonra istenen konuma imleci ve kaydı almak:

Cursor cursor = (Your cursorAdapter).getCursor(); 
cursor.moveToPosition(itemPosition); 
String itemPriority = cursor.getInt(1); 
Log.v(TAG, "Current item:" + itemPriority); 
+0

Cevabınız, çözümü bulmama yardımcı oldu. Sorun, Bağdaştırıcıyı bir alan değişkeni olarak bildirebileceğinizi bilmiyordum. Özgün sorumu, bağdaştırıcıyı nerede tanımladığımı eklemek için güncelledim. –

+0

Çok yararlı azgolfer, teşekkürler ton! – Soham

İlgili konular