2015-10-23 16 views
7

これは私が "menu_overflow"はどのように私はそれを見るを得ることができますしたいメニュー項目のアクションビューを取得するには?

home.xml

<item 
    android:id="@+id/action_shopping_cart" 
    android:actionLayout="@layout/action_bar_cart_button" 
    android:showAsAction="ifRoom" 
    android:title="Shopping Cart" /> 
<item 
    android:id="@+id/action_notifications" 
    android:actionLayout="@layout/action_bar_notifications_button" 
    android:showAsAction="ifRoom" 
    android:title="Notifications" /> 
<item 
    android:id="@+id/menu_overflow" 
    android:orderInCategory="100" 
    android:icon="@drawable/ic_action_overflow" 
    android:showAsAction="always" 
    android:title="OverFlow"> 

    <menu> 
     <item 
      android:id="@+id/action_my_account" 
      android:orderInCategory="100" 
      android:showAsAction="never" 
      android:title="My Account" /> 
     <item 
      android:id="@+id/action_current_orders" 
      android:orderInCategory="100" 
      android:showAsAction="never" 
      android:title="My Orders" /> 
     <item 
      android:id="@+id/action_wish_list" 
      android:orderInCategory="100" 
      android:showAsAction="never" 
      android:title="My Wishlist" /> 
     <item 
      android:id="@+id/action_contact_us" 
      android:orderInCategory="100" 
      android:showAsAction="never" 
      android:title="Contact Us" /> 
     <item 
      android:id="@+id/action_logout" 
      android:orderInCategory="100" 
      android:showAsAction="never" 
      android:title="Logout" /> 
    </menu> 
</item> 

マイコードですか?

私は次のように試してみました:

Activity.javaコード

公共ブールonCreateOptionsMenu(メニューメニュー){

 final MenuItem item = menu.findItem(R.id.menu_overflow); 
     View view = (View) findViewById(R.id.menu_overflow); 
     new MaterialShowcaseView.Builder(this) 
         .setTarget(mOverFlowIcon) 
         .setRadius(10) 
         .setMaskColour(Color.argb(150, 0, 0, 0)) 
         .setContentText("Find Your Wishlist Here") // optional but starting animations immediately in onCreate can make them choppy 
         .setDismissOnTouch(true) 
         .show(); 
    return super.onCreateOptionsMenu(menu); 
} 

をしかしビューを返していることヌルです。

お手数おかけください...ありがとうございましたthanx

+0

@Harshadアクティビティコードに返信用 –

答えて

0

これを試しましたか?

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 

     switch (item.getItemId()){ 
      case R.id.action_shopping_cart: 
       Toast.makeText(this, "action_shopping_cart", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.action_notifications: 
       Toast.makeText(this, "action_notifications", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.menu_overflow: 
       Toast.makeText(this, "menu_overflow", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.action_my_account: 
       Toast.makeText(this, "action_my_account", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.action_current_orders: 
       Toast.makeText(this, "action_current_orders", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.action_wish_list: 
       Toast.makeText(this, "action_wish_list", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.action_contact_us: 
       Toast.makeText(this, "action_contact_us", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.action_logout: 
       Toast.makeText(this, "action_logout", Toast.LENGTH_SHORT).show(); 
       break; 



     } 



     return super.onOptionsItemSelected(item); 
    } 

+0

感謝をチェックしてください...私はonOptionsCreateにmenu_overflowビューを望みます。私は、オーバーフローアイコンのチュートリアルを紹介しています。なぜ、フローメニューを見たいのですか?それをどうやって知っていますか? –

8

あなたはonCreateOptionsMenuでメニューを膨らませています(つまり、home.xmlである)あなたのXMLの名前の世話をしますか? onCreateOptionsMenuが実行されると、すぐに膨張するのではなく、xmlインフレがイベントキューに追加されるように見えます。これは、findViewById()を実行するときにnullポインタを引き起こす原因です。ビューのルックアップをハンドラの中に入れてみてください。 Handler内のコードはメッセージキューに追加されるため、メニューが拡張された後に実行されます。これにより、NULLポインタが解決されます。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      View view = (View) findViewById(R.id.menu_overflow); 
      new MaterialShowcaseView.Builder(this) 
        .setTarget(view) 
        .setRadius(10) 
        .setMaskColour(Color.argb(150, 0, 0, 0)) 
        .setContentText("Find Your Wishlist Here") // optional but starting animations immediately in onCreate can make them choppy 
        .setDismissOnTouch(true) 
        .show(); 
     } 
    }); 
    return true; 
} 
1

で試してみてください:

<item 
    android:id="@+id/menu_overflow" 
    android:orderInCategory="100" 
    android:icon="@drawable/ic_action_overflow" 
    android:title="OverFlow" 
    app:showAsAction="always" 
    app:actionViewClass="android.widget.ImageButton"> 

(注)この行:

app:showAsAction="always" 
    app:actionViewClass="android.widget.ImageButton" 
2

あなたはonPrepareOptionsMenu(Menu)メソッドをオーバーライドすることによりMenuItemへの参照を取得することができます:

をそれはこのようになります。
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem actionViewItem = menu.findItem(R.id.your_menu_item); 
    return super.onPrepareOptionsMenu(menu); 
} 

あなたはへの参照をしたい場合ActionViewあなたが方法MenuItemCompat.getActionView(MenuItem)でこれを行うことができます。

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem actionViewItem = menu.findItem(R.id.your_menu_item); 
    View v = MenuItemCompat.getActionView(actionViewItem); 
    return super.onPrepareOptionsMenu(menu); 
} 
関連する問題