Android开发:NavigationView头部TextView数据正确但不显示问题求助
问题根源
你自己通过LayoutInflater.inflate()创建了一个layout_navigation_header的实例,但这个实例并没有被添加到NavigationView中。界面上实际显示的是NavigationView通过app:headerLayout属性自动加载的另一个独立实例,所以你修改自己inflate的那个TextView,自然不会在界面上看到变化——Toast能显示是因为你确实修改了那个独立实例的文本,但它根本没被渲染到屏幕上。
正确解决方案
正确的做法是获取NavigationView已经加载好的头部布局实例,再修改其中的TextView:
修改后的完整代码
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu2); // 1. 获取NavigationView实例 NavigationView navigationView = findViewById(R.id.navigationView); // 2. 获取NavigationView已加载的头部布局(索引0对应第一个头部) View headerView = navigationView.getHeaderView(0); // 3. 从头部布局中找到目标TextView TextView profileName = headerView.findViewById(R.id.profName); // 获取前一个页面传递的数据 Intent intent = getIntent(); String name_user = intent.getStringExtra("name"); // 4. 设置TextView文本 profileName.setText(name_user); DrawerLayout drawerLayout = findViewById(R.id.drawerLayout); Toast.makeText(getApplicationContext(), profileName.getText().toString(), Toast.LENGTH_SHORT).show(); findViewById(R.id.imageMenu).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawerLayout.openDrawer(GravityCompat.START); } }); }
关键说明
- 必须先调用
super.onCreate()和setContentView(),确保主布局加载完成后,才能找到NavigationView实例。 - 使用
navigationView.getHeaderView(0)获取的是NavigationView内部已加载的头部布局,这才是界面上实际显示的那个实例。 - 无需手动inflate头部布局,除非你需要动态添加多个头部(当前场景不需要)。
额外注意事项
如果NavigationView设置了多个头部,可以通过getHeaderCount()获取头部总数,再通过索引获取对应头部;若需动态添加头部,可使用addHeaderView()方法,静态设置的头部直接用getHeaderView(0)即可。
内容的提问来源于stack exchange,提问作者DefLine
相关产品推荐
相关产品推荐

