2012-07-21 64 views
1

我有一個子菜單,並試圖讓項目顯示當前選擇的狀態。由於它是一個子菜單,我無法調用菜單方法。它在第一次被選中時顯示爲已選中,但我需要在菜單第一次膨脹時顯示。請有任何想法嗎?子菜單項目不保留當前狀態

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



public boolean onOptionsItemSelected(MenuItem item){ 

    switch (item.getItemId()){ 
    //-------Options menu---------- 
    case R.id.about: 
     Intent intentA = new Intent(FuelMoney.this, About.class); 
     startActivity(intentA); 
     return true; 
    case R.id.locale: 
     return true; 

    //-----Sub menu---------- UK item not showing as clicked (rest of the code not complete yet) 

     case R.id.uk_item: 
      if(this.countryCode.equals("uk")) 
      { 
       item.setChecked(true); 
      } 
     Toast.makeText(this, "UK selected", Toast.LENGTH_SHORT).show(); 
     this.countryCode="uk"; 
     this.country = new Country(countryCode); 
     this.regionAttributes(); 
     item.setChecked(true); 
     return true; 
    case R.id.us_item: 
     Toast.makeText(this, "US selected", Toast.LENGTH_SHORT).show(); 
     this.countryCode="us"; 
     this.country = new Country(countryCode); 
     this.regionAttributes(); 
     return true; 
    case R.id.eu_item: 
     Toast.makeText(this, "EU selected", Toast.LENGTH_SHORT).show(); 
     this.countryCode="eu"; 
     this.country = new Country(countryCode); 
     this.regionAttributes(); 
     return true; 
    case R.id.jpn_item: 
     Toast.makeText(this, "Japan selected", Toast.LENGTH_SHORT).show(); 
     this.countryCode="jpn"; 
     this.country = new Country(countryCode); 
     this.regionAttributes(); 
     return true; 
    case R.id.india_item: 
     Toast.makeText(this, "India selected", Toast.LENGTH_SHORT).show(); 
     this.countryCode="ind"; 
     this.country = new Country(countryCode); 
     this.regionAttributes(); 
     return true; 
    default : 
     return super.onOptionsItemSelected(item); 

     } 

回答

1

明白了。我需要獲得SubMenu並調用其中的方法。

下面是完整的代碼創建要顯示的選項的子菜單(在這種情況下,國家)的選項菜單,這也顯示當前設置:

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


    public boolean onOptionsItemSelected(MenuItem item){ 

     switch (item.getItemId()){ 
     //-------Options menu---------- 
     case R.id.about: 
     Intent intentA = new Intent(myClass.this, About.class); 
     startActivity(intentA); 
     return true; 
    case R.id.locale: 

      //-----Sub menu---------- 
     SubMenu sub = item.getSubMenu(); 
     sub.setGroupCheckable(R.id.locale, true, true); 
     if(this.countryCode.equals("uk")) 
     { 
      sub.getItem(0).setChecked(true); 
     }else if(this.countryCode.equals("us")) 
     { 
      sub.getItem(1).setChecked(true); 
     }else if(this.countryCode.equals("eu")) 
     { 
      sub.getItem(2).setChecked(true); 
     }else if(this.countryCode.equals("jpn")) 
     { 
      sub.getItem(3).setChecked(true); 
     }else if(this.countryCode.equals("ind")) 
     { 
      sub.getItem(4).setChecked(true); 
     } 


     return true; 

     case R.id.uk_item: 
     this.subMenuHelper("uk");// see below for subMenuHelper 
     item.setChecked(true); 
     return true; 
    case R.id.us_item: 
     this.subMenuHelper("us"); 
     item.setChecked(true); 
     return true; 
    case R.id.eu_item: 
     this.subMenuHelper("eu"); 
     item.setChecked(true); 
     return true; 
    case R.id.jpn_item: 
     this.subMenuHelper("jpn"); 
     item.setChecked(true); 
     return true; 
    case R.id.india_item: 
     this.subMenuHelper("ind"); 
     item.setChecked(true); 
     return true; 
    default : 
     return super.onOptionsItemSelected(item); 

     } 

    } 



    public void subMenuHelper(String cCode) 
     { 
      this.countryCode=cCode; 
      this.country = new Country(this.countryCode); 
      this.regionAttributes(this.country); 
     } 

和XML:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/locale" 
     android:title="@string/menu_set_region" 
     android:icon="@android:drawable/ic_menu_mapmode"> 

     <!--region submenu --> 
    <menu> 
    <group android:checkableBehavior="single"> 
     <item android:id="@+id/uk_item" 
      android:title="@string/uk" 
      /> 
     <item android:id="@+id/us_item" 
      android:title="@string/us" 
      /> 
     <item android:id="@+id/eu_item" 
      android:title="@string/eu" 
      /> 
     <item android:id="@+id/jpn_item" 
      android:title="@string/jpn" 
      /> 
     <item android:id="@+id/india_item" 
      android:title="@string/india" 
      /> 
     </group> 
     </menu> 
    </item> 

    <item android:id="@+id/about" 
     android:icon="@android:drawable/ic_menu_info_details" 
     android:title="@string/menu_about" 
     /> 
</menu> 

我希望在這裏有足夠的空間,這樣你就可以填寫空格:-)

相關問題