2011-05-27 19 views
16

से जाँच की के रूप में सेट मैं गतिविधियों में से एक है (जो नाम और मैक नंबरों की सूची से निपटने का सवाल है) में निम्नलिखित मेनू आइटम के साथ एक Android आवेदन है:एक मेनू आइटम कोड

<item android:id="@+id/menu_sort_tagg" 
     android:icon="@android:drawable/ic_menu_sort_by_size" 
     android:title="@string/menu_sort_list" > 
     <menu> 
     <group android:checkableBehavior="single"> 
      <item android:id="@+id/sort_by_name" 
        android:title="@string/sort_by_name" /> 
      <item android:id="@+id/sort_by_mac" 
          android:title="@string/sort_by_mac" /> 

    </menu> 
</item> 

और आवेदन के रूप में राज्य में परिवर्तन मैं इन सबसे विकल्पों की सूची है कि निम्न कोड के साथ पिछली बार इस्तेमाल किया गया था में जो आइटम पूर्व जांच करने के लिए सक्षम होना चाहते हैं:

((MenuItem)findViewById(R.id.sort_by_name)).setChecked(true); 

समस्या यह है कि इस विशिष्ट लाइन मुझे एक क्रम अपवाद देता है। क्या किसी के पास कोई सुराग है?

लॉग पर एक नज़र से पता चलता है कि रनटाइम अपवाद एक शून्य सूचक अपवाद द्वारा ट्रिगर किया जाता है। इस तरह से कोड को बदलने के द्वारा:

MenuItem mi = (MenuItem)findViewById(R.id.sort_by_name); 
mi.setChecked(true); 

यह स्पष्ट हो जाता है कि अपवाद सेकंड बयान में होता है, जैसे कि, MenuItem मील रिक्त है। तो सही मेनू Item पर पॉइंटर लाने के लिए पहले कथन में विफल क्यों होता है?

+0

हाय, आप हमें अपवाद के साथ एक लॉग दिखा सकते हैं? – Cata

+0

निश्चित रूप से, त्रुटि लॉग आउटपुट है: 11: 38: 34.562: त्रुटि/एंड्रॉइड रनटाइम (14371): अंतिम अपवाद: मुख्य 05-27 11: 38: 34.562: त्रुटि/एंड्रॉइड रनटाइम (14371): java.lang.RuntimeException: गतिविधि ComponentInfo {se.classis.safe.android/se.classis.safe.android.TagListActivity} शुरू करने में असमर्थ: java.lang.NullPointerException 05-27 11: 38: 34.562: ERROR/AndroidRuntime (14371): एंड्रॉइड पर। app.ActivityThread.performLaunchActivity (ActivityThread.java:1647) 05-27 11: 38: 34.562: ERROR/AndroidRuntime (14371): android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1663) 05-27 11: 38: 34.562: त्रुटि –

+0

ऐसा लगता है कि यह एक शून्य सूचक अपवाद से आया है। क्या मेन्यूइटम को पॉइंटर प्रदान करने के लिए findViewById faile खोज सकता है जिसे हम देखना चाहते हैं? –

उत्तर

46

आप मेनू के लिए findViewById() नहीं कर सकते हैं, क्योंकि यह एक मेनू है, न कि दृश्य। और जब आप इसे बनाया या तैयार किया जा रहा है तो आप मेनू स्थिति बदल सकते हैं। उदाहरण के लिए, यदि आप एक विकल्प मेनू बनाने के लिए, आप इसे Activity: onPrepareOptionsMenu() विधि में कर सकते हैं:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    menu.findItem(R.id.sort_by_name).setChecked(true); 
    //Also you can do this for sub menu 
    menu.getItem(firstItemIndex).getSubMenu().getItem(subItemIndex).setChecked(true); 
    return true; 
} 
+0

ठीक है, यह समस्या बताता है। धन्यवाद! –

+0

खुशी हुई यह मदद की! – Michael

+0

ग्रेट उत्तर, धन्यवाद –

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