2016-03-28 7 views
0

私は大学のリストを持っています。私が大学の一つをクリックすると、menu barfavourite_iconを持つ詳細ページに行きます。favourite_iconをクリックすると、その大学はサーバーにお気に入りとして保存され、favourite_iconfavourite_icon1に変更されます。そのメニューバーfavourite_iconfavourite_icon1である必要があります。その大学はすでにfavoiurited.Iは、回答が好きな場合は"status=fav"の場合は"status=not_fav"のように、大学が好意であるかどうかを確認するAPIを持っています。ここで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); 
    } 
関連する問題