Изменение текста на основе ввода в окне навигации - PullRequest
0 голосов
/ 18 сентября 2018

Когда пользователь создает учетную запись, его данные должны отображаться в заголовке навигационного ящика (зеленое пространство).Я не могу заставить его отображать это на панели навигации - он работал только на самой странице активности.Когда я попытался установить текст в методе onCreate, он вызывает исключение nullPointerException, поэтому я поместил его в другой метод.Это мой код:

Класс регистрации:

public void onClick(View v) {
    if (v.getId() == R.id.Bsignup) {
        String username = ETusername.getText().toString();
        String email = ETemail.getText().toString();
        String password = ETpassword.getText().toString();
        String confirmpassword = ETconfirmpassword.getText().toString();

        if (ETusername.getError() == null && ETemail.getError() == null &&
                ETpassword.getError() == null && ETconfirmpassword.getError() == null
                && db.checkExistingUser(username) == false) {
            User user = new User(username, password, email);
            db.addUser(user);

            Log.i("Signup", "Confirmed login");
            Log.i("Signup", username+" "+email);
            Intent i = new Intent(Signup.this, Home.class);
            i.putExtra("Username", username);
            i.putExtra("Email", email);
            startActivity(i);
        }
    }

Основная деятельность:

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

    Log.i("Home", "Loading profile");
    tvUsername = (TextView) findViewById(R.id.navUsername);
    username = getIntent().getStringExtra("Username");
    tvUsername.setText(username);

    tvEmail = (TextView) findViewById(R.id.navUserEmail);
    email = getIntent().getStringExtra("Email");
    tvEmail.setText(email);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

nav_header_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Light">

<ImageView
    android:id="@+id/imageView"
    android:layout_width="93dp"
    android:layout_height="97dp"
    android:contentDescription="@string/nav_header_desc"
    android:paddingTop="@dimen/nav_header_vertical_spacing"
    app:srcCompat="@drawable/dp_round" />

<TextView
    android:id="@+id/navUsername"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/nav_header_vertical_spacing"
    android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

<TextView
    android:id="@+id/navUserEmail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

1 Ответ

0 голосов
/ 18 сентября 2018

Решение:

Вам нужно получить объект Header, прежде чем что-то там установить.Используйте вот так:

View header = navigationView.getHeaderView(0);
TextView tvEmail = (TextView) header.findViewById(R.id.navUserEmail);
tvEmail.setText(email);

Здесь navigationView - это ваш NavigationView объект класса:

navigationView = (NavigationView) findViewById(R.id.nav_view_in_drawer);

Вот и все.

Надеюсь, это сработает.

...