2013-04-10 7 views
11

में कॉल नहीं किया गया है मेरे पास एक संवाद है जो आइटमों की एक सूची दिखाता है, मुझे इस सूची में आइटम को संपादित/हटाने में सक्षम होना चाहिए, इसलिए जब मैं उपयोगकर्ता पर लंबे समय तक दबाता हूं तो मैं एक संदर्भ मेनू डालता हूं आइटम को वे चुन सकते हैं कि वे क्या करना चाहते हैं (आइटम को संपादित या हटाएं)।onContextItem चयनित चयन डायलॉगफ्रैगमेंट

समस्या यह है कि onContextItemSelected कभी भी कॉल नहीं किया जाता है जब संदर्भ मेनू में कोई आइटम चुना जाता है।

मैंने यह देखने के लिए जांच की कि क्या डायलॉग खंड बनाने वाली गतिविधि कॉलबैक प्राप्त कर रही है, लेकिन ऐसा नहीं है तो ऐसा क्यों नहीं कहा जा रहा है? क्या आप एक संवाद में एक संदर्भ मेनू नहीं कर सकते हैं?

public class TypesDialogList extends DialogFragment implements LoaderManager.LoaderCallbacks<Cursor>,OnItemClickListener,OnCreateContextMenuListener{ 

ListView lv; 
SimpleCursorAdapter mAdapter; 
private int EDIT_TYPE = 1; 
private int DELETE_TYPE = 2; 
OnEditType mType; 


public Dialog onCreateDialog(Bundle state){ 
    final View v = getActivity().getLayoutInflater().inflate(R.layout.layer_dialog_layout, null, false); 
    lv = (ListView)v.findViewById(R.id.listView1); 
    lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    lv.setOnItemClickListener(this); 
    lv.setOnCreateContextMenuListener(this); 
    return new AlertDialog.Builder(getActivity()).setView(v).setPositiveButton("Add Type", new OnClickListener(){ 

     public void onClick(DialogInterface dialog, int which) { 

     } 

    }).setTitle("Type's").create(); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){ 
    super.onCreateContextMenu(menu, v, menuInfo); 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
    long id = info.id; 
    if(id > 3){ 
     menu.setHeaderTitle("Type Menu"); 
     menu.add(Menu.NONE, EDIT_TYPE, 1, "Edit"); 
     menu.add(Menu.NONE, DELETE_TYPE, 2, "Delete"); 
    }else{ 
     Toast.makeText(getActivity(),"Cannot edit type",Toast.LENGTH_SHORT).show(); 
    } 

} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    super.onContextItemSelected(item); 
    AdapterView.AdapterContextMenuInfo oMenuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    long id = oMenuInfo.id; 
    if(item.getItemId() == EDIT_TYPE){ 

    }else if(item.getItemId() == DELETE_TYPE){ 

    } 
    return true; 
} 

}

+0

नीचे उत्तर का चयन, यह – Nasrudeen

+0

काम कर रहा है शायद होस्टिंग गतिविधि 'onContextItemSelected' कार्यान्वयन जो फोन नहीं करता है' super' है। यह मेरे (कुछ हद तक समान) मामले में समस्या थी। – Stan

उत्तर

29

अभी भी एक समाधान की तलाश में किसी को भी के लिए, मैं सिर्फ onContextItemSelected(MenuItem item) को एक गुमनाम OnMenuItemClickListener कि प्रतिनिधियों बनाने वापस और मेरे मेनू में सभी वस्तुओं पर यह निर्धारित करके इस समस्या का समाधान।

@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { 
    // Creation/inflate menu here 

    OnMenuItemClickListener listener = new OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      onContextItemSelected(item); 
      return true; 
     } 
    }; 

    for (int i = 0, n = menu.size(); i < n; i++) 
     menu.getItem(i).setOnMenuItemClickListener(listener); 
} 
+1

अविश्वसनीय ... क्या यह ढांचे में एक बग है या क्या यह वास्तव में इस तरह के कामकाज के बिना समर्थित नहीं है? – mgalgs

+0

किसी भी तरह से यह मेरे लिए एंड्रॉइड से दूर जाने का एक और कारण है, मैं इस कामकाज का उपयोग नहीं कर सकता क्योंकि मेरा संवाद किसी अन्य स्क्रीन में किसी भी संवाद खंड के रूप में उपयोग नहीं किया जाता है और इससे 2 आमंत्रण –

+1

का कारण बनता है यह सच नहीं हो सकता है .. मुझे अभी यह पता चला है, और यह मेरी समस्या हल कर दिया गया है क्यों पर कॉन्टैक्ट इटैम चयन नहीं किया जा रहा था .. +1 आप 3+ साल के लिए सोचेंगे कि वे इसे ठीक करेंगे। – andyADD

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