2011-04-30 9 views
6

मैं क्रम में एंड्रॉयड डेवलपर्स पेज के निर्देश पर पढ़ा है चेक करने योग्य मेनू आइटम के साथ कोई समस्या चेक करने योग्य मेनू आइटम प्राप्त करने के लिए:एंड्रॉयड -

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:checkableBehavior="all"> 
     <item android:id="@+id/regu" 
       android:title="@string/Regulatory" /> 
     <item android:id="@+id/warn" 
       android:title="@string/Warning" /> 
     <item android:id="@+id/temp" 
       android:title="@string/Temporary" /> 
     <item android:id="@+id/bicy" 
       android:title="@string/Bicycle" /> 
    </group> 
</menu> 
:

http://developer.android.com/guide/topics/ui/menus.html

इस

मेरी xmlmenu है

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.regu: 
      if (item.isChecked()) 
      { 
       item.setChecked(false); 
       currAvailableOptions++; 
      } 
      else if(0 != currAvailableOptions) 
      { 
        item.setChecked(true); 
        currAvailableOptions--; 
      } 
      return true; 
     case R.id.warn: 
      if (item.isChecked()) 
      { 
       item.setChecked(false); 
       currAvailableOptions++; 
      } 
      else if(0 != currAvailableOptions) 
      { 
        item.setChecked(true); 
        currAvailableOptions--; 
      } 
     return true; 
     case R.id.temp: 
      if (item.isChecked()) 
      { 
       item.setChecked(false); 
       currAvailableOptions++; 
      } 
      else if(0 != currAvailableOptions) 
      { 
        item.setChecked(true); 
        currAvailableOptions--; 
      } 
      return true; 
     default: 
     return super.onOptionsItemSelected(item); 
     } 
    } 

public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.app_menu, menu); 
     return true; 
    } 

समस्या है जब मैं cL:

और यहाँ मेरे कोड है एक आइटम चिपकाया, मेनू आइटम गायब हो गया। अन्य मेनू आइटमों को देखने के लिए इसे दृश्यमान रहने की आवश्यकता नहीं होगी?

कोई विचार?

अभिवादन

+0

आप कभी भी इस समाधान हो गया? मुझे भी यही तकलीफ़ है। – Kalina

उत्तर

0

currAvailableOptions क्या है? मैंने आपके द्वारा लिंक किए गए लेख को देखा और उसमें इसके बारे में कुछ भी नहीं था। यह प्रतीत होता है तुम सब करने की जरूरत है की जांच है कि:

if (item.isChecked()) 
     item.setChecked(false); 
    else 
     item.setChecked(true); 

या कम से कम है कि क्या ट्यूटोरियल कहते हैं। शायद आपको इसे एक और पढ़ना चाहिए? उम्मीद है की यह मदद करेगा।

+4

इसे 'item.setChecked (! Item.is चेक किया गया))' :-) – MByD

2

मुझे पता है कि यह आपके प्रश्न का सीधा जवाब नहीं है, लेकिन कृपया अपने स्विच के बजाय निम्नलिखित कोड पर विचार करें, इससे आपको समस्या मिल सकती है।

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.regu: 
    case R.id.warn: 
    case R.id.temp: 
     if (item.isChecked()) 
      currAvailableOptions++; 
     else if(currAvailableOptions != 0) 
      currAvailableOptions--; 
     item.setChecked(!item.isChecked()); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
3

चेक करने योग्य आइटम केवल सबमेनू या संदर्भ मेनू में दिखाई देते हैं।

और सबमेनू के साथ वे (गूगल) का अर्थ है:

सबमेनू मेनू आइटम का एक अस्थायी सूची पर दिखाई देने वाले उपयोगकर्ता कि एक नेस्टेड मेनू होता है एक मेनू आइटम को छू लेती है।

अपने मेनू आइटम के बाद से सबमेनू नहीं आइटम हैं, यह

-1

काम नहीं करेगा आप शायद तोड़ जोड़ना चाहिए; प्रत्येक मामले के बाद बयान:

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.item1: 
     item.setChecked(!item.isChecked()); 
     break; 
    case R.id.item2: 
     item.setChecked(!item.isChecked()); 
     break; 
    default: 
     break; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

पर छोटा किया जा सकता है लेकिन क्या वह वास्तव में ओपी की समस्या को हल करेगा, या आप बस सुझाव दे रहे हैं कि किसी भी तरह से कोड को बेहतर बनाने के लिए? – user280109

+0

संबंधित प्रश्न जोड़ने के लिए भूल गए: http://stackoverflow.com/a/8564008 – kolpazar

+1

उसे प्रत्येक मामले में 'वापसी' मिली है, इसलिए 'ब्रेक' आवश्यक नहीं है – invertigo