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
相关产品推荐
相关产品推荐

