使用 MainActivity 的布局在导航抽屉中显示登录用户

Eug*_*ito 2 java xml android sharedpreferences navigation-drawer

我正在寻找有关如何从引用另一个布局中的 ID 的 MainActivity 在导航抽屉中设置用户名和电子邮件文本的解决方案。

nav_header_main.xml
Run Code Online (Sandbox Code Playgroud)

主活动截图 1

主活动截图 2

下面是显示登录用户从activity_main.xml引用 TextViews 的代码,但是我需要“ R.id”。引用 nav_header_main.xml 中的用户名和电子邮件 TextViews,以便能够在导航抽屉标题中显示用户的详细信息。

主活动.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());
Run Code Online (Sandbox Code Playgroud)

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" />
Run Code Online (Sandbox Code Playgroud)

Fer*_*med 7

  1. 使用NavigationView.getHeaderView(0)得到的标题视图。
  2. 使用HeaderView.findViewById()让子视图的参考。

尝试这个:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助~