У меня есть 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() во многих ответах, но поверьте, этот метод недоступен.
Есть ли решение этой проблемы, если не существует какой-либо другой способ сделать это?
«navigationview.getHeaderAt() ... этот метод не доступен» - Я считаю, что вам нужен метод getHeaderView (int index). Кроме того, если вы просто хотите изменить текст в TextView заголовка, вам не нужно полностью заменять заголовок. Используйте вышеупомянутый метод, чтобы получить заголовок и метод 'findViewById()' для доступа к TextView, который вы хотите изменить. –
@ MikeM.- Извините, мой плохой, я имел в виду только navigationView.getHeaderView(). Но вы можете взглянуть на http://i66.tinypic.com/sm3j21.png – fanatic
Убедитесь, что вы используете самую последнюю версию библиотеки. Этот метод был добавлен только [три месяца назад] (https://android.googlesource.com/platform/frameworks/support.git/+/cdccc4c6d5f1e40610ce4df4afeb1f99cbdb63e8%5E%21/#F2). –