Элементы подменю, не сохраняющие текущее состояние

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);

        }
Теги:
submenu
android-optionsmenu

1 ответ

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>

Я надеюсь, что здесь достаточно, чтобы вы могли заполнить пробелы: -)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню