2016-03-31 2 views
0

Ich habe eine Liste von Colleges zur Anzeige und klicke auf die Fachhochschule, es geht zur Detailseite. Dort gibt es eine Menüleiste mit Benachrichtigung und Favourite_icon. Hier habe ich die Favourite_icon und Favourite_icon1. Wenn die Benutzer die favourite_icon clcik gespeichert haben, speicherte sie als in dem Server und das Symbol wurde als Favourite_icon1 geändert. Nach einigen Prozessen habe ich das Favourited College besucht. Zu dieser Zeit sollte es die Favourite_icon1 in der Menüleiste anzeigen. Ich habe die folgende Methode versucht, aber nichts ist passiert. Ich habe den Code hinzugefügt, die ichWie man das Menüleisten-Icon anfänglich entsprechend der Server-Antwort einstellt

menu_clg.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:appmunu="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".UserDashBoardFragment"> 
    <item 
     android:id="@+id/action_notify" 
     android:icon="@drawable/mail_icon" 
     appmunu:showAsAction="always" 
     android:title="Notification" /> 
    <item 
     android:id="@+id/action_favourite" 
     android:icon="@drawable/icon_selector" 
     appmunu:showAsAction="always" 
     android:title="Favourite" /> 
</menu> 

diese Aktivität Code versucht haben

private boolean canAddItem; 

@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_clg, menu); 
     mMenu = menu; 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.action_notify: 
       navigatetoNotification(); 
       return true; 
      case R.id.action_favourite: 
       if (item.getItemId() == R.id.action_favourite) { 
        invalidateOptionsMenu(); 
        favouriteClg(); 
       } 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 

     if (canAddItem) { 
      menu.getItem(1).setIcon(R.drawable.vijay); 
      canAddItem = false; 
      favouriteClg(); 
     } else { 
      menu.getItem(1).setIcon(R.drawable.favourite_icon); 
      canAddItem = true; 
      favouriteClg(); 
     } 

     return super.onPrepareOptionsMenu(menu); 
    } 

dies der Code für den Check ist wheather das College bereits favorisiert ist oder nicht in onCreate() Methode

public void chechFavourite() { 
       new AsyncTask<Void, Void, String>() { 
        @Override 
        protected String doInBackground(Void... arg0) { 
         //method name changed here 
         //getAllEventFromUser method used for getting all previously send events of current user 

         return favouriteDelegates.getAllCollegeDetails(userMO, context); 
        } 

        @Override 
        protected void onPostExecute(String collegelists) { 

         if (collegelists != "null") { 
          initCollegeMO = gson.fromJson(collegelists, new TypeToken<InitCollegeMO>() { 
          }.getType()); 
          collegeMOs = initCollegeMO.getCollegeMOs(); 
          for (CollegeMO collegeMO1 : collegeMOs) { 
           //here the list of college has eceived from server so i checked all the college id with current college id 
           collegeId = collegeMO1.getCollegeId();       //here collegeMO isthe object which is accessed by parcelable from another activity 
           if (collegeMO.getCollegeId() == collegeId) { 
            canAddItem = true; 

           } else { 
            canAddItem = false; 

           } 
          } 
         } else { 
          canAddItem = false; 

         } 
        } 
       }.execute(null, null, null); 
      } 
     } 

Antwort

0

Hoffnung unter Code wäre für yo hilfreich u.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.actionbar, menu); 
    userItem = menu.findItem(R.id.userItem); 

    return menu; 
} 

Edit 1: Methode, die programmatisch Menü aktualisieren.

private void updateMenuTitles() { 
    if(isFavorite){ 
    userItem.setIcon(new BitmapDrawable(getResources(), favoriteBitmap)); 
    }else{ 
    userItem.setIcon(new BitmapDrawable(getResources(), unFavoriteBitmap)); 
    } 
    invalidateOptionsMenu();  
} 

Hoffe, das würde Ihnen helfen.

+0

i Bild auf meinem ziehbar habe ich muss überprüfen wheather seine bereits Favorit ist oder nicht, wenn favorisiert ich die favourite_icon1 sonst favourite_icon –

+0

@vijayg einstellen müssen, überprüfen Sie bearbeiten 1 –

+0

, wo ich dieses updateMenuTitles sollte hinzufügen() Methode. in oncreate()? –

0

Sie können den Titel Ihrer MenuItem Laufzeit ändern und das Klickereignis entsprechend ihrem Titel verwalten.

Siehe diesen Code, hoffe, es wird Ihnen helfen. Sie können updateMenuTitles() anrufen, nachdem Sie eine Antwort von API bekommen und den Titel geändert haben.

private Menu 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.menu_main, menu); 
     // Create your menu... 
     this.menu = menu; 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.action_favourite: 
       if (item.getTitle().equals("favourite")) { 
        //Alerady Favourite, make it unfavourite 
        MenuItem.setTitle("un-favourite"); 
        // do what you want 
       } 
       else if(item.getTitle().equals("un-favourite")){ 
        // un-favourite, make it favourite 
        MenuItem.setTitle("favourite"); 
        // do what you want 
       } 
       return true; 


     } 

     return super.onOptionsItemSelected(item); 
    } 

    /* 
    Update title of your menuItem whenever you want 
    */ 
    private void updateMenuTitles() { 
     MenuItem MenuItem = menu.findItem(R.id.action_favourite); 
     if (MenuItem.getTitle().equals("favourite")) { 
      //Alerady Favourite, make it unfavourite 
      MenuItem.setTitle("un-favourite"); 
     } 
     else if(MenuItem.getTitle().equals("un-favourite")){ 
      // un-favourite, make it favourite 
      MenuItem.setTitle("favourite"); 
     } 
    } 
+0

bitte verstehen Sie Frage @Anju Sharma –

Verwandte Themen