setText в навигационном ящике

Как установить текст для просмотра из макета заголовка ящика в навигационном ящике?

protected void onCreate(Bundle savedInstanceState) {

[...]

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 TextView name = findViewById(R.id.username);
 name.setText(R.string.af_anasayfa_af_butonu);

}

Вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод «void android.widget.TextView.setText (int)» для нулевой ссылки на объект.


person JavaOgreniyor    schedule 23.09.2018    source источник
comment
Вы уверены, что ваш TextView действительно имеет идентификатор username?   -  person user3738870    schedule 23.09.2018
comment
@ user3738870 Да   -  person JavaOgreniyor    schedule 23.09.2018


Ответы (3)


Вы можете попробовать это:

TextView name = (TextView) navigationView.getHeaderView(0).findViewById(R.id.username);
person navylover    schedule 23.09.2018
comment
@JavaOgreniyor Добро пожаловать, не могли бы вы проголосовать или принять мой ответ, спасибо! - person navylover; 23.09.2018

используйте это, чтобы изменить текст ящика материала

navigationView.getMenu().getItem(0).setTitle("any text");

or

navigationView.getMenu().findItem(R.id.nav_calculator).setTitle("xxx");

Во-вторых, ваш метод получения строки также неверен.

String s= getResources().getString(R.string.appbar_scrolling_view_behavior); 
person Intsab Haider    schedule 23.09.2018

TextView name = findViewById(R.id.username);

это неправильно, потому что имя пользователя находится в навигационном заголовке, а не в поле зрения

поэтому вы должны получить NavigationHeader, а затем получить имя пользователя, например,

TextView name = navigationView.getHeaderView(0).findViewById(R.id.username);
person Farrokh    schedule 23.09.2018