Страницы

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

суббота, 21 декабря 2019 г.

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

#java #android #android_layout #android_navigation_drawer #android_navigation_view


У меня есть вот такой 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");

    


Ответы

Ответ 1



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

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

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