एक संदर्भ मेनू का पूरा बिंदु यह है कि यह एक व्यक्ति अंतर्निहित दृश्य से जुड़ा हुआ है, और यह स्पष्ट रूप से एंड्रॉइड में एक डिज़ाइन सीमा है कि कॉलबैक 'ऑन कॉन्टेक्स्ट इटैम सेलेक्टेड' में एसोसिएशन खो गया है। पर्याप्त आकार के किसी भी दृश्य पर लंबे समय तक स्पर्श करने से दाएं माउस क्लिक के विकल्प के रूप में पूरी तरह उचित लगता है।
अन्य पदों की सिफारिश के रूप में है, कुछ संदर्भों के लिए:
AdapterView.AdapterContextMenuInfo menuInfo =
(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
उचित है और targetView एक उपयोगी संदर्भ बिंदु है।
दृश्य संदर्भ प्रदान करने के लिए दृश्य को उपclass और 'getContextMenuInfo' ओवरराइड करना एक और तरीका है। उदाहरण के लिए, एक साधारण TextView:
package ...;
public class TextViewWithContext extends TextView {
TextViewContextMenuInfo _contextMenuInfo = null;
public TextViewWithContext(Context context) {
super(context);
_contextMenuInfo = new TextViewContextMenuInfo(this);
}
public TextViewWithContext(Context context, AttributeSet attrs) {
super(context, attrs);
_contextMenuInfo = new TextViewContextMenuInfo(this);
}
protected ContextMenuInfo getContextMenuInfo() {
return _contextMenuInfo;
}
public boolean isContextView(ContextMenuInfo menuInfo) {
return menuInfo == (ContextMenuInfo)_contextMenuInfo;
}
protected class TextViewContextMenuInfo implements ContextMenuInfo {
protected TextView _textView = null;
protected TextViewContextMenuInfo(TextView textView) {
_textView = textView;
}
}
}
...
@Override
public boolean onContextItemSelected(MenuItem item) {
ContextMenuInfo menuInfo = item.getMenuInfo();
if (textViewWithContext.isContextView(menuInfo) {
...
}
}
अंत में, यह अधिक उपयोगी हो गया होता अगर आधार देखें वर्ग को देखने के लिए एक रिवर्स संदर्भ के साथ एक ContextInfo वस्तु सौंपा था, बल्कि वर्तमान में के रूप में अशक्त से।
यह भी देखें: http://stackoverflow.com/questions/2321332/detecting-which-selected-item-in-a-listview-spawned-the-contextmenu-android –