android - 在片段中使用 getView().findViewById 会返回 NullPointerException
问题描述
它确实给了我警告,但我从未使用过碎片,所以我不确定如何修复它。我在尝试查找工具栏的代码的第三行出现错误。
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = (View) inflater.inflate(R.layout.fragment_contact, container, false);
Toolbar toolbar = getView().findViewById(R.id.toolbar);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);
TextView textView = getView().findViewById(R.id.vive_unadeca);
textView.setOnClickListener(new View.OnClickListener() {//do stuff here} });
LinearLayout mapsT = getView().findViewById(R.id.locationT);
ImageView mapsI = getView().findViewById(R.id.location);
mapsT.setOnClickListener(new View.OnClickListener() {//do stuff here} });
mapsI.setOnClickListener(new View.OnClickListener() {//do stuff here} });
LinearLayout phoneT = getView().findViewById(R.id.phone_num);
ImageView phoneI = getView().findViewById(R.id.phone_icon);
phoneT.setOnClickListener(new View.OnClickListener() {//do stuff here} });
phoneI.setOnClickListener(new View.OnClickListener() {//do stuff here} });
LinearLayout emailT = getView().findViewById(R.id.email);
ImageView emailI = getView().findViewById(R.id.email_icon);
emailT.setOnClickListener(new View.OnClickListener() {//do stuff here} });
emailI.setOnClickListener(new View.OnClickListener() {//do stuff here} });
LinearLayout whatsappT = getView().findViewById(R.id.whatsapp_num);
ImageView whatsappI = getView().findViewById(R.id.whatsapp_icon);
whatsappT.setOnClickListener(new View.OnClickListener() {//do stuff here} });
whatsappI.setOnClickListener(new View.OnClickListener(){//do stuff here} });
return view;
}
在 clickListeners 中,我调用了 onCreateView 下面的其他方法,这些方法只调用了诸如打开 gmail、打开 whatsapp、打开电话、谷歌地图和 facebook 之类的意图。
我究竟做错了什么?
解决方案
你在getView()
里面打电话onCreateView()
。到那时,view
还没有设置,因为你是对的,然后构建它。
调用将在 after和 before之后getView()
返回非空值。 onCreateView()
onDestroyView()
相反,只需调用你刚刚膨胀的,我认为这就是你想要的view.findViewById
。View
LinearLayout mapsT = view.findViewById(R.id.locationT);
推荐阅读
- c# - .AUTH Cookie 在表单身份验证过程中被丢弃 ASP.NET
- c++ - 无法在 C++ 中创建 oauth 1.0 签名
- interrupt - 在 STM32CUBEIDE 中启用可以中断丢失
- r - R:从命名向量中迭代地创建一个向量
- python - OpenZeppelin 的测试助手时间包是否有等效的 Web3.py/Brownie
- mysql - 生成一个附加列“session_age”,其中包含会话已经在 SQL 中进行的时间量
- html - 为什么 Chrome 和 Firefox 使用 mm/dd/yyyy 格式在 en-GB 语言环境中?
- git - 推送失败的android-studio项目
- kotlin - Google Cloud Functions - 实时数据库触发器 - 如何将数据 JSON 反序列化为 POJO?
- c++ - 想要使用模板为 Arduino 板的每个引脚创建一个函数