Как обновить содержимое заголовка навигации в Android

Здравствуйте, я использую NavigationView в одном демонстрационном проекте. У меня есть макет заголовка NavigationView. Я получаю данные макета заголовка во время выполнения, и как только я получаю данные, я устанавливаю значения представлений, но данные не отражаются и не обновляются.

((TextView)headerNavigationView.findViewById(R.id.username)).setText(userData.getName());

Как правильно обновить представление навигации во время выполнения после получения данных из веб-службы.


person N Sharma    schedule 26.01.2016    source источник
comment
Может это поможет вам .   -  person pRaNaY    schedule 26.01.2016
comment
Вы вызывали недействительность для NavigationView?   -  person Amir    schedule 26.01.2016
comment
Да пробовал но не работает   -  person N Sharma    schedule 26.01.2016
comment
@pRaNaY эта ветка предназначена для другой цели   -  person N Sharma    schedule 26.01.2016
comment
@Williams, вы можете добавить часть кода?   -  person Amir    schedule 26.01.2016
comment
@Amir есть обратный вызов залпа, в котором я получаю ответ веб-службы, а затем я пытаюсь установить значение textview, которое я получил от веб-службы.   -  person N Sharma    schedule 06.02.2016
comment
@Williams Я делаю это много раз, и у меня нет проблем. Ответ на ваш залп удовлетворил?   -  person Amir    schedule 06.02.2016
comment
Вы уверены, что находитесь в потоке пользовательского интерфейса?   -  person Jared Rummler    schedule 07.02.2016
comment
То, как вы устанавливаете текст, правильно, поэтому я уверен, что вы делаете это из фонового потока. Попробуйте обернуть фрагмент кода в runOnUiThread(new Runnable(){ @Override public void run(){ <UI update> } });   -  person Konstantin Loginov    schedule 07.02.2016
comment
@JaredRummler Да, я работаю в потоке пользовательского интерфейса   -  person N Sharma    schedule 08.02.2016


Ответы (3)


Я столкнулся с той же проблемой: это не столько проблема с вашим веб-сервисом и т. д., сколько ошибка в Android с заголовком NavigationView. Обходной путь состоит в том, чтобы программно увеличить заголовок, как показано ниже... Предположим, у вас есть TextView с именем «версия» в заголовке:

NavigationView mNavigationView = (NavigationView) findViewById(R.id.navigation_view);    
View headerLayout = mNavigationView.inflateHeaderView(R.layout.my_header_layout);
// Now you can update the views in your header as you want :
TextView version = (TextView) headerLayout.findViewById(R.id.version);
version.setText("text in my header");
person JBA    schedule 07.02.2016

Нужно попробовать код, как показано ниже, чтобы получить View из Navigationview.

Для поддержки Android 23.1.0 можно использовать файл addOnLayoutChangeListener. Что-то вроде:

headerNavigationView.addOnLayoutChangeListener( new View.OnLayoutChangeListener()
{
    @Override
    public void onLayoutChange( ... )
    {
        navigationView.removeOnLayoutChangeListener( this );

        View header = navigationView.getHeaderView(0)
        TextView tvUsername = (TextView) header.findViewById(R.id.R.id.username);
        tvUsername.setText(userData.getName());
    }
} );

Проверьте этот ответ.

Я надеюсь, что это поможет вам.

person pRaNaY    schedule 26.01.2016
comment
Я уже делаю это.. мой headerNavigationView - это представление заголовка.. мой вопрос не в том, как получить представление из представления навигации.. Я получаю это, но значение не обновляется - person N Sharma; 26.01.2016
comment
это не относится к моему вопросу.. начал щедрость - person N Sharma; 06.02.2016

Реализация NavigationView недавно изменилась. Вы больше не можете получить доступ к NavigationView, чтобы найти заголовок определенного идентификатора. Вместо этого следует использовать addHeaderView, чтобы добавить собственное представление, или inflateHeaderView, который возвращает представление, которое вы ищете.

person Doug Stevenson    schedule 07.02.2016