根据导航抽屉中的输入更改文本

时间:2018-09-18 12:47:47

标签: android android-layout navigation-drawer

用户创建帐户时,其详细信息应显示在导航抽屉的标题(绿色区域)中。我无法将其显示在导航抽屉上-它仅在活动页面上起作用。当我尝试在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 :(得分:0)

解决方案:

您需要先获取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);

就是这样。

希望它会起作用。