2012-07-26 27 views
6

मैं सिर्फ आईडी के बजाय कर्सर का वर्तमान रिकॉर्ड प्राप्त करना चाहता हूं, ताकि मैं एक संदर्भ मेनू में हेरफेर कर सकूं।कर्सर से ContextMenu में डेटा कैसे प्राप्त करें

मैं इस उदाहरण here पता चलता है कि आप कैसे आईडी प्राप्त करने के लिए देखा था:

@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)); 
    } 

यह बहुत अच्छा है क्योंकि यह मुझे क्लिक किया संदर्भ मेनू के उचित SQLite डेटाबेस आईडी जो मुझे लिखने के लिए अनुमति देगा प्राप्त करने के लिए अनुमति देता है एक लुकअप करने के लिए एक समारोह। लेकिन निश्चित रूप से मैं सिर्फ वर्तमान कर्सर का पुन: उपयोग कर सकता हूं?

मैं यह कर की कोशिश की:

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

लेकिन कर्सर लाइन बस रिकॉर्ड मैं के बाद कर रहा हूँ के बजाय डेटाबेस का स्कीमा वापस जाने के लिए लगता है।

क्या कोई कृपया कुछ प्रकाश डाला जा सकता है।

संपादित करें: @azgolfer के लिए धन्यवाद मुझे समाधान मिला है। मैं एडाप्टर को पॉप्युलेट करने के लिए fillData() विधि का उपयोग करता हूं। आम तौर पर यह कोई चर के साथ घोषित किया जाता है। मुझे इस विधि को फ़ील्ड चर के साथ फिर से परिभाषित करना पड़ा। curstor एडाप्टर onContextItemSelected में दृश्यमान बनाने के लिए कोड के प्रासंगिक भाग यहाँ है:

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

आप पुन: उपयोग से क्या मतलब है

सबसे पहले, क्या उपयोगकर्ता दबाया की स्थिति का निर्धारण? और 'c.getInt (1) 'उस कर्सर पंक्ति के सूचकांक 1 जो भी हो रहा है। तो बस उस कर्सर पंक्ति की अन्य अनुक्रमणिका से रिकॉर्ड्स प्राप्त करें, जैसे 'c.getString (2)'। जब तक आप कुछ और करने की कोशिश नहीं कर रहे हैं। – Andy

+0

क्षमा करें मुझे लगता है कि काम पुन: उपयोग "उपयोग" होना चाहिए। मुद्दा यह है कि कर्सर डेटा वापस नहीं करता है, बस स्कीमा। –

+0

क्या आप कृपया 'आइटम प्राथमिकता' दिखाए गए प्रिंट को प्रिंट कर सकते हैं? – Andy

उत्तर

13

आप अपनी सूची आइटम प्रदर्शित करने के लिए एक CursorAdapter, सही उपयोग कर रहे हैं? फिर आपके पास कर्सर एडाप्टर पर getCursor() को कॉल करके कर्सर तक पहुंच है। कर्सर से सही रिकॉर्ड पुनर्प्राप्त करने के लिए, आपको केवल उस आइटम की स्थिति प्राप्त करने की आवश्यकता है जिसे उपयोगकर्ता ने दबाया है, फिर कर्सर को उस स्थिति में ले जाएं और अपना डेटा पुनर्प्राप्त करें।

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

तब इच्छित स्थान पर कर्सर ले जाने के लिए और रिकॉर्ड को पुनः प्राप्त:

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

आपके उत्तर ने मुझे समाधान खोजने में मदद की। समस्या यह थी कि मुझे नहीं पता था कि आप एडाप्टर को फ़ील्ड चर के रूप में घोषित कर सकते हैं। मैंने अपना मूल प्रश्न अपडेट किया है जिसमें मैं एडाप्टर को परिभाषित करता हूं। –

+0

बहुत उपयोगी azgolfer, धन्यवाद एक टन! – Soham