2016-03-28 71 views
0

中設置菜單欄中的默認圖標我有大學列表。如果我點擊其中一所大學,它將進入具有menu barfavourite_icon的詳細信息頁面。如果我點擊favourite_icon該大學存儲在服務器中的收藏夾,並且favourite_icon更改爲favourite_icon1。如果我們在一段時間後再次切換大學的詳細信息該菜單欄favourite_icon應該是favourite_icon1如果該大學已經favoiurited.I有API來檢查學院是否favourited或如果它贊成的迴應是"status=fav""status=fav"否則"status=not_fav"如何根據服務器響應在android

在這裏,我添加的代碼,供大家參考

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> 

icon_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_selected="true" 
     android:drawable="@drawable/vijay" 

     /> 

    <item 
     android:state_selected="false" 
     android:drawable="@drawable/favourite_icon" 
     /> 
</selector> 

活動代碼

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

    // delete the selected event from event list added here 
    boolean canAddItem = false; 
    @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); 
    } 

favourtieclg()實現方法具d

public void favouriteClg() { 

     final CollegeMO collegeMO = (CollegeMO) getIntent().getSerializableExtra("CollegeMO"); 
     DatabaseHelper db = new DatabaseHelper(context); 
     userMO = db.getUserData(1); 
     new AsyncTask<Void, Void, String>() { 
      @Override 
      protected String doInBackground(Void... arg0) { 
       return favouriteDelegates.addFavourite(userMO, collegeMO, context); 
      } 

      @Override 
      protected void onPostExecute(String userData) { 
       if (!userData.equals("0") && null != userData) { 
        UserMO userMO = gson.fromJson(userData, new TypeToken<UserMO>() { 
        }.getType()); 

        if (userMO.getStatus().equals("success")) { 
         Toast.makeText(getApplicationContext(), userMO.getMessage(), Toast.LENGTH_LONG).show(); 
        } 
       } 
      } 
     }.execute(null, null, null); 
    } 

回答

0

這就是我如何實現它,希望這個幫助。您也可以使用supportInvalidateOptionsMenu()InvalidateOptionsMenu()更新更改。

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     menu.clear(); //If you want to clear the menu 
     inflater.inflate(R.menu.activity_menu, menu); 
     updateMenuIcon(menu); 
    } 

    private void updateMenuIcon(Menu menu) { 
     if (menu == null) return; 
     if (condition) {//Check for some condition 
      changeMenuIcon(menu, R.drawable.fav); 
     } else { 
      changeMenuIcon(menu, R.drawable.not_fav); 
     } 
    } 

    private void changeMenuIcon(Menu menu, int resource) { 
     Drawable newIcon = getResources().getDrawable(resource); 
     menu.findItem(R.id.menu_fav).setIcon(newIcon); 
    }