Android Studio中为TextView设置文本触发空指针异常如何解决
问题原因
你遇到的崩溃是因为代码尝试给空的TextView对象调用setText方法,findViewById(R.id.username)返回了null,说明控件没有被正确找到,不需要更换其他TextView,按以下步骤排查即可:
- 确认你贴出的TextView代码确实写在
fragment_home.xml布局文件中,没有误写到Activity布局或者其他Fragment的布局文件里 - 修正Fragment布局加载的写法,不需要额外从Activity获取LayoutInflater,直接使用
onCreateView方法传入的inflater加载布局,同时可增加非空判断避免崩溃,方便定位问题,修改后的代码参考:
package com.example.mmreviews; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; public class HomeFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // 直接使用传入的inflater加载布局 View view = inflater.inflate(R.layout.fragment_home, container, false); view.findViewById(R.id.btn_edit).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getFragmentManager().beginTransaction().replace(R.id.fragment_container, new EditFragment()).commit(); } }); view.findViewById(R.id.btn_logout).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), LogIn.class); startActivity(intent); } }); TextView textViewUsernameInfo = view.findViewById(R.id.username); // 增加非空判断避免崩溃,调试时可通过日志定位问题 if (textViewUsernameInfo != null) { textViewUsernameInfo.setText("Some text"); } else { Log.e("HomeFragment", "未找到id为username的TextView,请检查布局文件"); } return view; } }
- 检查
fragment_home.xml中是否存在多个相同id为username的控件,避免重名冲突 - 清理Android Studio项目缓存,点击顶部菜单栏
Build -> Clean Project,再点击Rebuild Project后重新运行,排除R文件索引异常的问题。
内容的提问来源于stack exchange,提问作者Milos Mikalacki
相关产品推荐
相关产品推荐

