У меня есть вот такой 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(...);
Комментариев нет:
Отправить комментарий