You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Fragment中CalendarView声明与初始化报错问题求助

Android Fragment中CalendarView初始化错误解决方法

情况一:成员变量声明时直接初始化报错

错误代码

public class FragmentCalendar extends Fragment {
    Calendar calendar;
    CalendarView calendarView = (CalendarView) findViewById(R.id.calendarView);
    Date date;
}

报错信息

error: cannot find symbol
CalendarView calendarView = (CalendarView)findViewById(R.id.calendarView);
^
symbol: method findViewById(int)
location: class FragmentCalendar

原因

Fragment类本身没有findViewById()方法,这个方法是Activity类的成员方法。直接在Fragment的成员变量声明阶段调用它,编译器无法识别该方法。


情况二:onCreateView中初始化顺序错误导致空指针

错误代码

public class FragmentCalendar extends Fragment {
    Calendar calendar;
    CalendarView calendarView;
    Date date;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){
        calendar = calendar.getInstance(); 
        date = calendar.getTime();
        System.out.println("current date : "+date);

        calendarView.findViewById(R.id.calendarView);
        View view = inflater
                .inflate(R.layout.fragment_calendar, container, false); 
        return view;
    }
}

报错信息

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.CalendarView.findViewById(int)' on a null object reference
at com.example.doodoobii.FragmentCalendar.onCreateView(FragmentCalendar.java:50)

原因

  1. calendarView初始为null,直接调用它的findViewById()方法会触发空指针异常;
  2. 正确逻辑是先将布局文件inflate成View对象,再通过这个View对象查找内部的CalendarView控件,而非反向操作。

正确的初始化方式

在onCreateView中,先完成布局inflate得到根View,再通过根View查找CalendarView:

public class FragmentCalendar extends Fragment {
    Calendar calendar;
    CalendarView calendarView;
    Date date;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){
        // 先inflate布局,获取Fragment的根View
        View view = inflater.inflate(R.layout.fragment_calendar, container, false); 
        
        // 通过根View查找目标CalendarView控件
        calendarView = view.findViewById(R.id.calendarView);
        
        // 后续业务逻辑
        calendar = Calendar.getInstance(); 
        date = calendar.getTime();
        System.out.println("current date : "+date);

        return view;
    }
}

补充说明

你的XML布局代码无问题,只需确保R.id.calendarView与布局文件中的控件id完全匹配即可。

内容的提问来源于stack exchange,提问作者learningLion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:55:14