Изменение содержимого NavigationView по команде (например, нажатие кнопки)

Итак, я пытаюсь динамически добавить некоторый контент в свой навигационный ящик. В принципе работает. Я могу добавлять элементы в свое приложение и отображать их в панели навигации. Единственная проблема в том, что мне нужно перезапустить приложение, чтобы новые вещи в навигационном ящике всплывали (потому что я могу заставить код работать только в методе onCreate), что не является желаемым поведением.

Вот что у меня есть в методе onCreate на данный момент:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
Menu menu = navigationView.getMenu();
MenuItem it1 = menu.add(R.id.group1, 1, 2, "TEST DYNAMIC");

Очень простой, но он делает то, что я хочу. Он добавляет в меню заголовок «тест».
Я хочу иметь возможность доступа к этому фрагменту кода по желанию, например, когда я нажимаю кнопку. Сам я этого сделать, к сожалению, не смог. Неважно, находится ли он в методе в MainActivity или в одном из других моих фрагментов, но он не должен запускаться только при создании MainActivity, этого недостаточно. Кроме того, мне, вероятно, понадобится перерисовать навигационный ящик после добавления к нему чего-то (я предполагаю), но я тоже не знаю, как это сделать, поэтому любая помощь в этом была бы отличной.


person Timmiej93    schedule 24.02.2016    source источник
comment
см. этот ответ stackoverflow.com/questions/33284812/   -  person ELITE    schedule 24.02.2016
comment
Ну, это почти то же самое, что я сделал. То, что я хочу и что не обсуждается в ответе, на который вы ссылаетесь, - это то, как получить доступ к этим вещам вне метода onCreate, потому что я хочу динамически добавлять элементы меню во время работы приложения, а не только при запуске приложения.   -  person Timmiej93    schedule 24.02.2016
comment
stackoverflow.com/questions/30695038/   -  person ELITE    schedule 24.02.2016
comment
Тем не менее, ничего не говорится о том, как использовать эти функции вне метода onCreate. Хотя я ценю усилия.   -  person Timmiej93    schedule 24.02.2016


Ответы (1)


Я попробовал следующий код

Здесь button — это переменная, если тип Button, и я добавил к ней onClickListener.

EDIT :: В действии сделайте так

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        Menu menu = navigationView.getMenu();
        SubMenu topChannelMenu = menu.addSubMenu("Category");
        topChannelMenu.add("Menu Name");
        MenuItem mi = menu.getItem(menu.size()-1);
        mi.setTitle(mi.getTitle());
    }
});

EDIT :: Во фрагменте сделайте так

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        Menu menu = navigationView.getMenu();
        SubMenu topChannelMenu = menu.addSubMenu("Category");
        topChannelMenu.add("Menu Name");
        MenuItem mi = menu.getItem(menu.size()-1);
        mi.setTitle(mi.getTitle());
    }
});

Это работает...

Это добавляет меню в конец предыдущего меню.

person ELITE    schedule 24.02.2016
comment
Не могли бы вы расширить это до автономного метода? Таким образом, я могу использовать его только для своей основной деятельности, а не для фрагментов, которые я использую. - person Timmiej93; 24.02.2016
comment
во фрагменте попробуйте getActivity().findViewById(R.id.nav_view); вместо findViewById(R.id.nav_view); - person ELITE; 24.02.2016
comment
Это действительно работает отлично, спасибо. Не могли бы вы включить свой предыдущий комментарий в свой ответ, чтобы я мог его принять? - person Timmiej93; 24.02.2016
comment
отредактировал ответ .. добавил, как добавить как для Activity, так и для Fragment. - person ELITE; 24.02.2016