用户创建帐户时,其详细信息应显示在导航抽屉的标题(绿色区域)中。我无法将其显示在导航抽屉上-它仅在活动页面上起作用。当我尝试在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>
答案 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);
就是这样。
希望它会起作用。