You need to enable JavaScript to run this app. Android Studio中如何在Fragment内添加日历并解决空指针报错
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何在Fragment内添加日历并解决空指针报错

修复步骤

你遇到的空指针异常核心是viewPager变量为null时调用了setAdapter方法,和你添加的Calendar控件本身无直接关联,按以下步骤修改即可:

  • 步骤1:核对主布局控件ID

    打开你的activity_main.xml布局,确认ViewPager控件的android:id属性为@+id/view_pager,如果ID命名和代码中findViewById(R.id.view_pager)不一致,修改任意一端保持两者匹配即可。
  • 步骤2:修正ViewPagerAdapter的调用逻辑

    你当前代码中把addFragment作为静态方法调用属于错误写法,应该用你实例化的适配器对象调用对应方法,将原代码中:
    ViewPagerAdapter.addFragment(SubstanceListFragment.getInstance(), "Substance List");
    ViewPagerAdapter.addFragment(CalendarFragment.getInstance(), "Calendar");
    ViewPagerAdapter.addFragment(RecapFragment.getInstance(), "Recap");
    
    修改为:
    viewPagerAdapter.addFragment(SubstanceListFragment.getInstance(), "Substance List");
    viewPagerAdapter.addFragment(CalendarFragment.getInstance(), "Calendar");
    viewPagerAdapter.addFragment(RecapFragment.getInstance(), "Recap");
    
  • 步骤3:移除多余的Handler.post逻辑

    在onCreate中直接设置ViewPager适配器即可,不需要用Handler做延迟调度,修改后的getTabs方法如下:
    public void getTabs(){
        ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPagerAdapter.addFragment(SubstanceListFragment.getInstance(), "Substance List");
        viewPagerAdapter.addFragment(CalendarFragment.getInstance(), "Calendar");
        viewPagerAdapter.addFragment(RecapFragment.getInstance(), "Recap");
        viewPager.setAdapter(viewPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
    }
    
  • 步骤4:确认CalendarFragment加载正确布局

    检查你的CalendarFragment类的onCreateView方法,确保正确加载了row_calendar.xml布局,示例代码如下:
    public class CalendarFragment extends Fragment {
        private CalendarView calendarView;
    
        public static CalendarFragment getInstance() {
            return new CalendarFragment();
        }
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.row_calendar, container, false);
            calendarView = view.findViewById(R.id.calendarView);
            // 后续可在此处添加CalendarView的事件监听逻辑
            return view;
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:12:04