Страницы

Поиск по вопросам

понедельник, 12 ноября 2018 г.

Как в NavigationView в header установить текст?

У меня есть вот такой NavigationView

Вот такой код:




и вот такой header





Мне нужно в этот header в поле для имени user поставить его имя, а в поле для email поставить соответственно email
Я понимаю, что все стандартно и нужно найти по id view с которым хочешь работать и установить в него TextView.
Но когда я нахожу view и ставлю text, то вылетает ошибка, что такого view еще нет. Это логично т.к. NavigationView еще не открыт...
Так вот вопрос. Как отследить что NavigationView уже открыт и только после этого устанавливать text в view?
Если я в onCreate() нахожу и устанавливаю текст
TextView tvName = (TextView) findViewById(R.id.tvName); TextView textEmail = (TextView) findViewById(R.id.textEmail);
tvName.setText("test"); textEmail.setText("test");
то получаю такую ошибку в строке tvName.setText("test");
FATAL EXCEPTION: main Process: com.example.android.camera2basic, PID: 32152 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.camera2basic/com.example.android.camera2basic.activities.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
Если применять такой подход, то ошибки нет, но текст остается таким как по умолчанию
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); RelativeLayout headerView = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.nav_header_mainsecond, null); TextView tvName = (TextView) headerView.findViewById(R.id.tvName); TextView textEmail = (TextView) headerView.findViewById(R.id.textEmail); tvName.setText("name"); textEmail.setText("email");


Ответ

Вам надо:
Получить NavigationView
NavigationView nv = ...;
Получить разметку его Header
View header = nv.getHeaderView(0);
Найти нужные поля и с ними что-то сделать
TextView tv = (TextView)header.findViewById(...);

Комментариев нет:

Отправить комментарий