无法为填充后的View设置setText?附OnCreate方法代码及XML片段
解决LayoutInflater填充的View设置setText无效果的问题
嘿,这个问题我之前也碰到过!核心原因是你手动inflate出来的View其实是一个全新的、独立的实例,它并没有被添加到当前页面的布局结构里,所以你设置了文本也看不到——因为这个View根本没被渲染到屏幕上呀!
结合你提到的nav_header_app_base布局,大概率是NavigationView的头部,给你两种可行的解决方案:
方案一:直接从NavigationView获取已加载的Header View(推荐)
这是最规范的做法,因为NavigationView初始化时已经加载了指定的header布局,你不需要自己重新inflate:
// 第一步:找到页面中的NavigationView实例 NavigationView navView = findViewById(R.id.navigation_view); // 第二步:获取它的Header View(索引0对应第一个Header,若只有一个直接用0即可) View headerView = navView.getHeaderView(0); // 第三步:在Header View中找到目标TextView并设置文本 TextView textViewUserName = headerView.findViewById(R.id.textViewUserNameDrawer); String userName = "Mr. " + sharedPreferences.getString(Constants.FIRST_NAME, "") + " " + sharedPreferences.getString(Constants.LAST_NAME, ""); textViewUserName.setText(userName);
方案二:手动Inflate后添加到布局中
如果你确实需要手动Inflate这个布局,那一定要记得把它添加到对应的容器里(比如NavigationView的Header,或者其他布局容器):
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.nav_header_app_base, null); // 先设置文本 TextView textViewUserName = view.findViewById(R.id.textViewUserNameDrawer); String userName = "Mr. " + sharedPreferences.getString(Constants.FIRST_NAME, "") + " " + sharedPreferences.getString(Constants.LAST_NAME, ""); textViewUserName.setText(userName); // 关键步骤:把这个View添加到NavigationView作为Header NavigationView navView = findViewById(R.id.navigation_view); // 如果原来已经有默认Header,可先移除再添加 // navView.removeHeaderView(navView.getHeaderView(0)); navView.addHeaderView(view);
额外排查点
如果还是没效果,可以检查这几点:
- 先给TextView设置固定文本(比如
textViewUserName.setText("测试文本")),排除SharedPreferences中没有数据的问题 - 确认XML里的TextView ID
textViewUserNameDrawer和代码里的完全一致,没有拼写错误 - 如果不是NavigationView场景,要把Inflate的View添加到当前页面的布局容器(比如LinearLayout、FrameLayout等)中
内容的提问来源于stack exchange,提问作者Vinod Jadhav
相关产品推荐
相关产品推荐

