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

        }
4

1 に答える 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>

空欄を埋めることができるように、ここで十分であることを願っています:-)

于 2012-07-23T09:30:20.803 に答える