web-dev-qa-db-fra.com

Comment puis-je ajouter un menu dynamiquement à la vue de navigation inférieure?

Android a un nouvel élément d'interface utilisateur - BottomNavigationView

enter image description here

Je ne veux pas contenir mes menus dans les fichiers xml. Je recevrai les informations sur les éléments de menu et les commandes du côté backend. Je veux les créer dynamiquement et les placer dans la BottomNavigationView dans la méthode onCreate(). Puis-je faire ceci?

13
Malder

Par défaut, BottomNavigationView commence par un menu vide. Vous pouvez utiliser la méthode getMenu() pour obtenir l'instance de Menu, puis ajouter des éléments de menu comme dans réponse ci-dessus . Par exemple,

BottomNavigationView bottomNavigation = findViewById(R.id.bottom_navigation);
Menu menu = bottomNavigation.getMenu();
menu.add(Menu.NONE, MENU_ITEM_ID_ONE, Menu.NONE, getString(R.string.str_menu_one))
    .setIcon(R.drawable.ic_action_one);
11
ehartwell

La manière simple d'utiliser les options dynamiques dans la vue de navigation inférieure consiste à utiliser différents éléments de menu comme celui-ci:

switch (userType){
            case UserTypes.A:
                bottomNavigationView.inflateMenu(R.menu.menu_bottom_navigation_a);
                break;
            case UserTypes.B:
                bottomNavigationView.inflateMenu(R.menu.menu_bottom_navigation_b);
                break;
            case UserTypes.C:
                bottomNavigationView.inflateMenu(R.menu.menu_bottom_navigation_c);
               break;
        }
7
SANAT

Voici un exemple de création dynamique d'éléments de menu, dans l'activité principale, vous avez 2 dispositions. vous pouvez obtenir votre propre mise en page à partir de votre backend et créer des éléments de menu dynamiquement à l'aide de menu.add

src: http://www.mobiledevguide.com/2014/01/dynamically-create-menu-items-in-Android.html

public class MainActivity extends Activity {

private Button mButtonOne,mButtonTwo;
private static final int MENU_ITEM_ID_ONE =1;
private static final int MENU_ITEM_ID_TWO =2;
private static final int MENU_ITEM_ID_THREE =3;
private static final int MENU_ITEM_ID_FOUR =4;
private static final int MENU_ITEM_ID_FIVE =5;
private static final int MENU_ITEM_ID_SIX =6;
private int mMenuSet = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mButtonOne=(Button) findViewById(R.id.buttonSetOne);
    mButtonTwo=(Button) findViewById(R.id.buttonSetTwo);

    mButtonOne.setOnClickListener(clickListener);
    mButtonTwo.setOnClickListener(clickListener);
}
OnClickListener clickListener=new OnClickListener() {

    @Override
    public void onClick(View v) {
        if (v.getId()==R.id.buttonSetOne) {
            mMenuSet=1;
        } else if (v.getId()==R.id.buttonSetTwo){
            mMenuSet=2;
        }
        invalidateOptionsMenu();
        /*
         * if you are using ActionBarSherlock use this.supportInvalidateOptionsMenu();
         * if you are using ActionBarCompat use invalidateOptionsMenu (Activity activity) method
         * */
    }
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);

    if(mMenuSet==1){
        menu.add(Menu.NONE, MENU_ITEM_ID_ONE, Menu.NONE,getString(R.string.str_menu_one)).setIcon(R.drawable.ic_action_one).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add(Menu.NONE, MENU_ITEM_ID_TWO, Menu.NONE,getString(R.string.str_menu_two)).setIcon(R.drawable.ic_action_two).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add(Menu.NONE, MENU_ITEM_ID_THREE, Menu.NONE,getString(R.string.str_menu_three)).setIcon(R.drawable.ic_action_three);

    }else if(mMenuSet==2){
        menu.add(Menu.NONE, MENU_ITEM_ID_FOUR, Menu.NONE,getString(R.string.str_menu_four)).setIcon(R.drawable.ic_action_four).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add(Menu.NONE, MENU_ITEM_ID_FIVE, Menu.NONE,getString(R.string.str_menu_five)).setIcon(R.drawable.ic_action_five).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        menu.add(Menu.NONE, MENU_ITEM_ID_SIX, Menu.NONE,getString(R.string.str_menu_six)).setIcon(R.drawable.ic_action_six);
    }       
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_ITEM_ID_ONE:
        Toast.makeText(this, "Click on "+ getString(R.string.str_menu_one), Toast.LENGTH_SHORT).show();
        break;
    case MENU_ITEM_ID_TWO:
        Toast.makeText(this, "Click on "+ getString(R.string.str_menu_two), Toast.LENGTH_SHORT).show();
        break;
    case MENU_ITEM_ID_THREE:
        Toast.makeText(this, "Click on "+ getString(R.string.str_menu_three), Toast.LENGTH_SHORT).show();
        break;
    case MENU_ITEM_ID_FOUR:
        Toast.makeText(this, "Click on "+ getString(R.string.str_menu_four), Toast.LENGTH_SHORT).show();
        break;
    case MENU_ITEM_ID_FIVE:
        Toast.makeText(this, "Click on "+ getString(R.string.str_menu_five), Toast.LENGTH_SHORT).show();
        break;
    case MENU_ITEM_ID_SIX:
        Toast.makeText(this, "Click on "+ getString(R.string.str_menu_six), Toast.LENGTH_SHORT).show();
        break;
    case R.id.action_settings:
        Toast.makeText(this, "Click on "+ getString(R.string.action_settings), Toast.LENGTH_SHORT).show();
        break;

    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}}
4
Idanatz