-1

У меня есть NavigationView в Layer Layout, который содержит HeaderView, за которым следует Меню (как указано в шаблоне Activity Drawer для AndroidStudio). Мой заголовок содержит изображение и пару текстовых элементов в LinearLayout. Я хочу отредактировать один из TextViews в заголовке из SharedPreferences. Я использую следующую функцию, чтобы сделать этоКак удалить существующий вид NavHeader при добавлении обновленного с помощью NavigationView.addHeaderView()?

public void navUpdate() 
{ 
     navigationView=(NavigationView)findViewById(R.id.nav_view); 
     linearLayout=(LinearLayout) LayoutInflater.from(this).inflate(R.layout.nav_header_main, null); 
     textView_nname=(TextView)linearLayout.findViewById(R.id.textView_nname); 


     String name=sharedPreferences.getString("name","Your Name"); 
     textView_nname.setText(name); 

     navigationView.removeHeaderView(linearLayout); 
     navigationView.addHeaderView(linearLayout); 
} 

Проблема заключается в том, хотя я добавил строку

navigationView.removeHeaderView(linearLayout); 

мой предыдущий headerview все еще видна над новым. И предыдущий не обновляется. Я читал о методе navigationview.getHeaderAt() во многих ответах, но поверьте, этот метод недоступен.

Here's how it looks

Есть ли решение этой проблемы, если не существует какой-либо другой способ сделать это?

+0

«navigationview.getHeaderAt() ... этот метод не доступен» - Я считаю, что вам нужен метод getHeaderView (int index). Кроме того, если вы просто хотите изменить текст в TextView заголовка, вам не нужно полностью заменять заголовок. Используйте вышеупомянутый метод, чтобы получить заголовок и метод 'findViewById()' для доступа к TextView, который вы хотите изменить. –

+0

@ MikeM.- Извините, мой плохой, я имел в виду только navigationView.getHeaderView(). Но вы можете взглянуть на http://i66.tinypic.com/sm3j21.png – fanatic

+0

Убедитесь, что вы используете самую последнюю версию библиотеки. Этот метод был добавлен только [три месяца назад] (https://android.googlesource.com/platform/frameworks/support.git/+/cdccc4c6d5f1e40610ce4df4afeb1f99cbdb63e8%5E%21/#F2). –

ответ

1

для того, чтобы получить Header от NavigationView вам придется позвонить getHeaderView(int index) например:

View headerView = navigationView.getHeaderView(0); 
textView_nname = (TextView)headerView.findViewById(R.id.textView_nname); 
// set whatever you like on the textView. 
+0

Это метод, о котором я читал. но поверьте мне, он недоступен http://i66.tinypic.com/sm3j21.png – fanatic

+0

Обновите свою зависимость до 23.1.1 – k0sh

+1

спасибо ....! работал. – fanatic