2

I am looking for a solution as to how I can set the text of username and email in the navigation drawer from a MainActivity referencing the IDs within another layout.

nav_header_main.xml

MainActivity Screenshot 1

MainActivity Screenshot 2

Below is code displaying the logged in user referencing the TextViews from the activity_main.xml however I need the "R.id." to reference the username and email TextViews inside the nav_header_main.xml to be able to display user's details in a navigation drawer header.

MainActivity.java

if(!SharedPrefManager.getInstance(this).isLoggedIn()){

            finish();
            startActivity(new Intent(this, LoginActivity.class));
        }
        textviewUsername = (TextView)findViewById(R.id.username);
        textviewEmail = (TextView)findViewById(R.id.email);
     /*
        textviewUsername = (TextView)findViewById(R.id.textViewUsernameNav);
     textViewEmail= (TextView)findViewById(R.id.textViewEmailNav); */

         textviewEmail.setText(SharedPrefManager.getInstance(this).getEmail());
         textviewUsername.setText(SharedPrefManager.getInstance(this).getUsername());

nav_header_xml

android:id="@+id/nav_header_main_id"

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

<TextView
    android:id="@+id/textViewEmailNav"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="username@email.com" />
Eugelito
  • 25
  • 2
  • 7

2 Answers2

7
  1. Use NavigationView.getHeaderView(0) to get the header view.
  2. Use HeaderView.findViewById() to get reference of child view.

Try this:

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    NavigationView mNavigationView;
    View mHeaderView;

    TextView textViewUsername;
    TextView textViewEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ...................
        ..........................

        // NavigationView
        mNavigationView = (NavigationView) findViewById(R.id.nav_view);

        // NavigationView Header
        mHeaderView =  mNavigationView.getHeaderView(0);

        // View
        textViewUsername = (TextView) mHeaderView.findViewById(R.id.textViewUsernameNav);
        textViewEmail= (TextView) mHeaderView.findViewById(R.id.textViewEmailNav);

        // Set username & email
        textViewUsername.setText(SharedPrefManager.getInstance(this).getUsername());
        textViewEmail.setText(SharedPrefManager.getInstance(this).getEmail());


        mNavigationView.setNavigationItemSelectedListener(this);
    }
}

Hope this will help~

Ferdous Ahamed
  • 21,438
  • 5
  • 52
  • 61
1

Try to use findViewById on the header view, something like this:

NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);
View headerView = navigationView.getHeaderView(0);
textviewUsername= (TextView) headerView.findViewById((R.id.username));
Shira Elitzur
  • 433
  • 3
  • 9