2012-02-25 12 views
5

मैं चयनित Listview आइटम से संदर्भ मेनू का शीर्षक कैसे सेट कर सकता हूं? यह नीचे मेरी मुख्य गतिविधि है।चयनित सूची दृश्य आइटम से संदर्भ मेनू का शीर्षक सेट करें

public class OListActivity extends ListActivity { 
...... 
...... 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     registerForContextMenu(getListView()); 
     ...... 
...... 
     MatrixCursor cursor; 
     cursor = NameManager.getnameList(); 
     startManagingCursor(cursor); 
     String[] from = { "name", "info", "status", BaseColumns._ID }; 
     int[] to = { R.id.name, R.id.info, R.id.status }; 
     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       R.layout.row, cursor, from, to); 
     setListAdapter(adapter); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Menu");// TODO Change to name of selected listview item. 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.context_menu, menu); 
    } 
..... 
..... 

मैं R.id.name को menu.setHeaderTitle सेट करना होगा। मुझे एक और सिमिलर question पता है, लेकिन यह कई टेक्स्टव्यू के साथ एक जटिल ListView से निपटने के बारे में उल्लेख नहीं करता है।

उत्तर

13

onCreateContextMenu() विधि से ContextMenuInfo पैरामीटर का उपयोग करें:

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     AdapterView.AdapterContextMenuInfo info; 
     try { 
      // Casts the incoming data object into the type for AdapterView objects. 
      info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
     } catch (ClassCastException e) { 
      // If the menu object can't be cast, logs an error. 
      Log.e(TAG, "bad menuInfo", e); 
      return; 
     } 
     Cursor cursor = (Cursor) getListAdapter().getItem(info.position); 
     if (cursor == null) { 
      // For some reason the requested item isn't available, do nothing 
      return; 
     } 

     // if your column name is "name" 
     menu.setHeaderTitle(cursor.getString(cursor.getColumnIndex("name"))); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.context_menu, menu); 
    } 
+0

यह काम करता है, बहुत बहुत धन्यवाद। जिस तरह से मुझे 'menu.setHeaderTitle (कर्सर.getString (1)) में बदलना पड़ा था। –

+0

@ बिनॉयबाबू आप सही हैं 'getString()' को 'int' की आवश्यकता है और 'स्ट्रिंग' नहीं है। मैं थक गया हूं और मैं विधि 'कर्सर.getString (कर्सर.get कॉलम इंडेक्स ("नाम")) के बारे में सोच रहा था; '। – Luksprog

+0

इसके बारे में चिंता मत करो। वैसे भी तुम मेरे नायक हो। कुछ नींद ठीक हो जाओ? –

0

मैं जानता हूँ कि यह काफी एक पुराने पोस्ट है और सही जवाब के रूप में अच्छी तरह से है। हालांकि, आज इसका उपयोग करते समय मैं कुछ ऐसा आया जो मैं जोड़ना चाहता हूं।

ContextMenuInfo पैरामीटर का उपयोग सटीक आइटम स्थिति को खोजने के लिए किया जाता है जो ContextMenu i.e हमारे adpater आइटम को शुरू करता है।

इसलिए, यह में विधि GetItem() के ऊपर एक कर्सर ऑब्जेक्ट के रूप में, प्रकार है कि स्थिति info.position का उपयोग कर एडाप्टर के getItem() विधि में परिभाषित के एक आइटम लौट सकते हैं।

(मेरे मामले में यह एक मॉडल वर्ग लौट आए और फिर मैं menu.setHeaderTitle() के माध्यम से शीर्षक सेट करने के लिए है कि मैं अपने तरीके कि अपने मॉडल model.getItamName() तरह का समर्थन करता है पारित कर सकते हैं एहसास हुआ)

यह भी ध्यान रखें कि यदि आपके AdapterView किसी हेडर आप शामिल menuInfo का उपयोग कर स्थिति लाने के दौरान उन्हें बाहर करना होगा। पसंद है,

Cursor cursor = (Cursor) getListAdapter().getItem(info.position - yourList.getHeaderViewsCount()); 

उम्मीद है कि यह किसी की सहायता करेगा। :)

संबंधित मुद्दे