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

Android开发:在Fragment中创建CalendarView时setContentView等方法标红求助

Fragment中使用CalendarView的错误修正

你代码里的问题主要出在Fragment的生命周期方法使用错误,以下是具体问题和修正方案:

核心错误点

  • Fragment没有setContentView()方法:这个方法是Activity专属的,Fragment需要通过onCreateView()方法加载布局。
  • 布局未加载时调用findViewById():onCreate()阶段Fragment的布局还未初始化,此时调用findViewById()会导致空指针,且Fragment本身没有这个无参方法,需要通过加载后的View来调用。
  • 上下文与监听器类名不明确:Toast用getApplicationContext()不够稳妥,Fragment中建议用requireContext();OnDateChangeListener需要指定为CalendarView.OnDateChangeListener,避免类引用混淆。

修正后的完整代码

public class CalendarFragment extends Fragment {
    private CalendarView calendarView;

    public CalendarFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // 加载Fragment布局
        View view = inflater.inflate(R.layout.fragment_calendar, container, false);
        // 通过加载后的View获取CalendarView实例
        calendarView = view.findViewById(R.id.calendarView);
        // 设置日期选择监听器(注意完整类名)
        calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
                // 拼接日期字符串(月份+1是因为CalendarView的月份从0开始)
                String selectedDate = new StringBuilder().append(month + 1)
                        .append("-").append(dayOfMonth).append("-").append(year)
                        .toString();
                // 使用Fragment的上下文显示Toast
                Toast.makeText(requireContext(), selectedDate, Toast.LENGTH_LONG).show();
            }
        });
        // 返回加载后的View
        return view;
    }
}

额外说明

  • 确保你的fragment_calendar.xml布局文件中确实存在id为calendarView的CalendarView控件。
  • 如果需要在后续生命周期中操作calendarView,可以在onViewCreated()方法中处理,也是可行的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:50:11