2015-10-23 15 views
7

Questo è il mio codiceCome ottenere la visualizzazione dell'elemento di menu?

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> 

Voglio la vista "menu_overflow" come posso ottenere che?

ho cercato seguente modo:

Activity.java codice

booleano onCreateOptionsMenu (menu Menu) pubblico {

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

Ma è vista tornare è nulla.

Si prega di aiutare ... thanx

+0

@Harshad Si prega di controllare il codice di attività –

risposta

0

Hai provato questo?

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

Prendersi cura del nome del vostro XML (che è home.xml)

+0

Grazie per la risposta ... io voglio la vista menu_overflow su onOptionsCreate. Sto mostrando tutorial per l'icona di overflow, questo è il motivo per cui voglio vedere il menu di overflow ... Sai come ottenerlo? –

8

Si sta gonfiando il menu in onCreateOptionsMenu? Sembra che quando onCreateOptionsMenu viene eseguito, l'inflazione xml viene aggiunta alla coda degli eventi, anziché gonfiare immediatamente. Questo è ciò che causa il puntatore nullo quando esegui findViewById(). Prova a mettere la vista in un gestore. Il codice all'interno del gestore viene aggiunto alla coda dei messaggi e verrà quindi eseguito dopo che il menu è stato gonfiato. Questo risolverà il tuo puntatore nullo. Sarà simile a questa:

@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

Prova con:

<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"> 

Nota queste righe:

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

È possibile ottenere un riferimento al MenuItem sovrascrivendo il metodo onPrepareOptionsMenu(Menu):

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem actionViewItem = menu.findItem(R.id.your_menu_item); 
    return super.onPrepareOptionsMenu(menu); 
} 

Se si desidera un riferimento al ActionView si può fare questo con il metodo 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); 
} 
Problemi correlati