2013-06-26 8 views
11

हाई फ्रेंड कैसे एक एप्लिकेशन बना रहे हैं जो एक टैब एप्लिकेशन जोड़ रहा है।हम मेन्यू आइटम को गतिशील रूप से

मेरे घर में जो शेरलॉकफ्रैगमेंट एक्टिविटी बढ़ाता है, मैं menu.xml को फुला रहा हूं और विकल्प मेन्यूमेट क्लिक श्रोता पर कोड शामिल करता हूं। Fragmentactivity में tabhost और प्रत्येक टैब पर यह टुकड़े लोड करता है। यह मेरा menu.xml

<item 
     android:id="@+id/action_settings" 
     android:orderInCategory="100" 
     android:showAsAction="always" 
     android:icon="@drawable/setting_selector" 
     android:title="" 
     > 
     <menu > 
      <item 
       android:id="@+id/Profile" 
       android:showAsAction="ifRoom" 
       android:title="Profile"/> 
      <item 
       android:id="@+id/chngDoctor" 
       android:showAsAction="ifRoom" 
       android:title="Change doctor" 
       android:visible="false"/> 
      <item 
       android:id="@+id/changePword" 
       android:showAsAction="ifRoom" 
       android:title="Change password"/> 
      <item 
       android:id="@+id/logout" 
       android:showAsAction="ifRoom" 
       android:title="Logout"/> 
     </menu> 
    </item> 

है और यह मेरा onCreateOptionMenu और वर्ग होम में onOptionItemSelected तरीकों है

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 
    getSupportMenuInflater().inflate(R.menu.main, menu); 
    SubMenu subMenu = (SubMenu) menu.getItem(0).getSubMenu(); 
    if(userType.equals("admin")) 
     subMenu.getItem(1).setVisible(true); 
    else 
     subMenu.getItem(1).setVisible(false); 
    return true; 
} 

और यह मेरा onOptionItemSelected विधि

@Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     switch (item.getItemId()) { 
     case R.id.Profile: 
       break; 
     case R.id.changePword : 
      break; 
     case R.id.chngDoctor : 
       break; 
     case R.id.logout: 
      Home.this.finish(); 
      break; 
     } 
     return true; 
    } 

है मैं कुछ जोड़ने की जरूरत टैब परिवर्तन के आधार पर मेनू। यह टैब परिवर्तन पर है, मैं अलग-अलग टुकड़े लोड करता हूं और जब खंड में परिवर्तन होता है तो मुझे मेनू में नए आइटम जोड़ने की आवश्यकता होती है। मेरी सूचीफ्रैग जो शेरलॉक फ्रैगमेंट को बढ़ाती है और जब मैं तीसरे टैब पर क्लिक करता हूं तो यह लोड हो जाएगा। जब इस टुकड़ा लोड मैं मेनू

उत्तर

2
यहाँ

को 1 मेनू आइटम जोड़ने के लिए एक उदाहरण है की जरूरत है ... यह आपकी मदद कर सकती है ...

private static final int MENU_ADD = Menu.FIRST; 
    private static final int MENU_LIST = MENU.FIRST + 1; 
    private static final int MENU_REFRESH = MENU.FIRST + 2; 
    private static final int MENU_LOGIN = MENU.FIRST + 3; 


    @Override 
     public boolean onPrepareOptionsMenu(Menu menu) { 
      menu.clear(); 
      if(enableAdd) 
       menu.add(0, MENU_ADD, Menu.NONE, R.string.your-add-text).setIcon(R.drawable.your-add-icon); 
      if(enableList) 
       menu.add(0, MENU_LIST, Menu.NONE, R.string.your-list-text).setIcon(R.drawable.your-list-icon); 
      if(enableRefresh) 
       menu.add(0, MENU_REFRESH, Menu.NONE, R.string.your-refresh-text).setIcon(R.drawable.your-refresh-icon); 
      if(enableLogin) 
       menu.add(0, MENU_LOGIN, Menu.NONE, R.string.your-login-text).setIcon(R.drawable.your-login-icon); 
      return super.onPrepareOptionsMenu(menu); 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      super.onOptionsItemSelected(item); 

      switch (item.getItemId()) { 
      case MENU_ADD: doAddStuff(); break; 
      case MENU_LIST: doListStuff(); break; 
      case MENU_REFRESH: doRefreshStuff(); break; 
      case MENU_LOGIN: doLoginStuff(); break; 
      } 
      return false; 
+0

मेरी समस्या कैसे अलग टुकड़े – Vikky

21

निम्नलिखित तरीके का प्रयास करें।

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 

     menu.add(0, 0, 0, "Option1").setShortcut('3', 'c'); 
     menu.add(0, 1, 0, "Option2").setShortcut('3', 'c'); 
     menu.add(0, 2, 0, "Option3").setShortcut('4', 's'); 

     SubMenu sMenu = menu.addSubMenu(0, 3, 0, "SubMenu"); //If you want to add submenu    
     sMenu.add(0, 4, 0, "SubOption1").setShortcut('5', 'z'); 
     sMenu.add(0, 5, 0, "SubOption2").setShortcut('5', 'z');    

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) {   

     switch (item.getItemId()) { 
     case 0: 
      // code for option1 
      return true; 
     case 1: 
      // code for option2 
      return true; 
     case 2: 
      // code for option3 
      return true;    
     case 4: 
      // code for subOption1 
      return true; 
     case 5: 
      // code for subOption2 
      return true;    
     } 
     return super.onOptionsItemSelected(item); 
    } 

यह आपकी मदद कर सकता है।

+1

के लिए अलग अलग मेनू आइटम जोड़ने मैं जब किसी विशेष टुकड़ा – Vikky

+1

भरी हुई है आप [इस जाँच की थी एक नया मेनू आइटम dynamicaly जोड़ने की जरूरत है का जवाब ] (http://stackoverflow.com/questions/13596113/adding-menu-item- गतिशील रूप से- sherlockactionbar-fragment-tabs) प्रश्न? – Gunaseelan

+0

या .... अब मुझे जवाब मिला। – Vikky

1

उपयोग onPrepareOptionsMenu विधि और स्पष्ट सभी मेनू पहले

menu.clear(); 

का उपयोग कर फिर मेनू जोड़ें।

इसके अलावा refer here .. जाँच अपने onPrepareOptionsMenu विधि

4

menu.xml आप जोड़ना चाहिए सभी मेनू आइटम में। फिर आप उन वस्तुओं को छुपा सकते हैं जिन्हें आप प्रारंभिक लोडिंग में देखना नहीं चाहते हैं।

<item 
    android:id="@+id/action_newItem" 
    android:icon="@drawable/action_newItem" 
    android:showAsAction="never" 
    android:visible="false" 
    android:title="@string/action_newItem"/> 

विधि OnCreate() में setHasOptionsMenu(true) जोड़े अपने टुकड़ा कक्षा में मेनू आइटम आह्वान करने के लिए।

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

आप फिर से अपने टुकड़ा कक्षा में onCreateOptionsMenu ओवरराइड करने के लिए जरूरत नहीं है। Fragment में उपलब्ध onPrepareOptionsMenu विधि ओवरराइड करके मेनू आइटम को बदला जा सकता है (जोड़ें/remoev)।

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    menu.findItem(R.id.action_newItem).setVisible(true); 
    super.onPrepareOptionsMenu(menu); 

} 
0

Gunaseelan के आधार पर

@Override 
public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    menu.removeGroup(1); 
    if (iotsnames.isEmpty()) return true; 
    for (int i=0; i<iotsnames.size(); i++){ 
     menu.add(1, i, 0, iotsnames.get(i)); 
    } 
    return true; 
} 
संबंधित मुद्दे