2016-03-28 4 views
0

Здесь я имею строку меню с двумя пунктами, называемых notification_icon и favourite_icon, когда я нажал favourite_icon, которые должны быть изменены, как favourite_icon2 .so, что я попытался селектору. Селектор работает только для android:state_pressed="true" не android:state_selected="true". s Пожалуйста, руководство мне сделать that.Here я добавил следующий код для refreenceКак изменить Menubar значок при нажатии на Android

menu_clg.xml (under menu) 

<?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 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 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.action_notify: 
       navigatetoNotification(); 
       return true; 

      case R.id.action_favourite: 
       favouriteClg(); 
       return true; 


     } 

     return super.onOptionsItemSelected(item); 
    } 

ответ

2

Теперь, что мы вы хотите сделать, когда пользователь нажимает на значок «+», мы добавим новый элемент и изменим значок добавления, чтобы удалить значок «X».

onOptionsItemSelected() будет вызываться, когда пользователь нажимает на элемент. onOptionsItemSelected (элемент MenuItem) Объект MenuItem передается в качестве параметра, который является ссылкой на элемент с нажатием. Используя этот объект, мы можем знать, какой элемент был нажат.

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

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

boolean canAddItem = false; 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if(item.getItemId() == R.id.action_addItem){ 
     // (1) add a new item 
      // (2) change add to remove 
    } 
    else{ 
      // if a the new item is clicked show "Toast" message. 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

Мы должны вызвать onPrepareOptionsMenu (меню Menu), чтобы добавлять, удалять и изменять пункты меню. На Android 2.3.x и ниже система вызывает onPrepareOptionsMenu() каждый раз, когда пользователь открывает меню опций (нажимает кнопку «Меню»). На Android 3.0 и выше нам нужно вызвать invalidateOptionsMenu(), чтобы запросить системный вызов onPrepareOptionsMenu().

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

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

boolean canAddItem = false; 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    Toast toast; 
    if(item.getItemId() == R.id.action_addItem){ 
     invalidateOptionsMenu(); 
    } 
    else{ 
     toast = Toast.makeText(this, item.getTitle()+" Clicked!", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    if(canAddItem){ 
     menu.getItem(0).setIcon(R.drawable.ic_content_remove); 
     MenuItem mi = menu.add("New Item"); 
     mi.setIcon(R.drawable.ic_location_web_site); 
     mi.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
     canAddItem = false; 
    } 
    else{ 
     menu.getItem(0).setIcon(R.drawable.ic_content_new); 
     canAddItem = true; 
    } 

    return super.onPrepareOptionsMenu(menu); 
} 

}

Надеется, что это помогает.

+0

работает –

+1

полный исходный код @ github https://github.com/hmkcode/Android/tree/master/android-menu-events-change –

Смежные вопросы