2017-10-12 9 views
0

Merci pour votre aide et je suis désolé si je peux manquer quelque chose de très basique ici, mais j'essaye depuis plusieurs heures maintenant comment charger une image dans un élément de menu qui a été créé grâce à une mise en page personnalisée et a été Je me demandais si l'un d'entre vous pourrait m'aider avec ça? J'ai vérifiais la documentation officielle et sur des postes tels que ceux-ci Custom view for Menu Item mais ..Comment obtenir et remplir un élément de menu créé via une mise en page personnalisée?

C'est mon onCreateOptionsMenu OND onPrepareOptionsMenu

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     final MenuItem alertMenuItem = menu.findItem(R.id.action_my_personal); 
     FrameLayout rootView = (FrameLayout) alertMenuItem.getActionView(); 

     redCircle = (FrameLayout) rootView.findViewById(R.id.view_alert_red_circle); 
     countTextView = (TextView) rootView.findViewById(R.id.view_alert_count_textview); 
     ImageView hc_image_menu_inflated = (ImageView) rootView.findViewById(R.id.hc_image_menu); 

     rootView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onOptionsItemSelected(alertMenuItem); 
      } 
     }); 


     if (menu.findItem(R.id.hc_image_menu) != null) { 
      loadMenuIcon(menu.findItem(R.id.hc_image_menu), my_image_url); 
     } 

     return super.onPrepareOptionsMenu(menu); 
    } 

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

     return true; 
    } 

Comme vous pouvez le voir, je l'ai ajouté ces lignes pour éviter le plantage de l'application, comme menu.finditem (R.id.hc_image_menu) revient comme nul et qui est où le problème est, comme je veux remplir le ImageView qui a l'id hc_image_menu mais je ne suis pas réussir malgré tant de tentatives

if (menu.findItem(R.id.hc_image_menu) != null) { 
     loadMenuIcon(menu.findItem(R.id.hc_image_menu), my_image_url); 
    } 

Mon code pour mon toolbar_main_menu mise en page est la suivante:

<item 
     android:id="@+id/action_my_personal" 
     app:actionLayout="@layout/toolbar_menu_hc" 
     android:orderInCategory="100" 
     android:title="My Personal Trainer" 
     app:showAsAction="always" /> 

Et pour ma mise en page personnalisée (de toolbar_hc_menu) est celui-ci:

<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="48dp" 
android:layout_height="32dp" 
android:layout_gravity="center"> 


<ImageView 
    android:id="@+id/hc_image_menu" 
    android:layout_marginRight="8dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:src="@drawable/gavin"/> 

<FrameLayout 
    android:id="@+id/view_alert_red_circle" 
    android:layout_width="14dp" 
    android:layout_height="14dp" 
    android:layout_gravity="top|end" 
    android:background="@drawable/date_circle" 
    android:visibility="gone" 
    tools:visibility="visible"> 

    <TextView 
     android:id="@+id/view_alert_count_textview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:textColor="@color/white" 
     android:textSize="10sp" 
     tools:text="3"/> 

</FrameLayout> 

Merci beaucoup pour tout aider à cela. Vraiment très apprécié !! :)

+0

hc_image_menu n'est pas un élément de menu – nomag

+0

Bonjour @nomag Merci beaucoup pour votre réponse. Oui, je le sais, mais je ne sais pas comment obtenir l'élément de menu approprié associé à l'affichage de l'image hc_image_menu? Merci encore! –

+0

Vous avez déjà menuItem: alertMenuItem. N'est-ce pas? – nomag

Répondre

1

Problème résolu. :) A la fin, je devais juste charger l'image dans l'ImageView après avoir obtenu le alertMenuItem.

if (my_image_url!= null) { 
     Picasso.with(getApplicationContext()).load(my_image_url).into(hc_image_menu_inflated); 
    }