Я использую библиотеку AgendaCalendarView и хочу установить свой собственный макет, но я не знаю как.Когда я пытаюсь без добавления пользовательского макета все работает нормально.Я посмотрел много примеров, но не нашел anithing.Можно ли привязать этот рендер?
Мой фрагмент:
public class AdminFragment extends Fragment implements CalendarPickerController {
private AdminViewModel mViewModel;
private AdminFragmentBinding binding;
AdminWorkingTimeControlCardBinding binding2;
private DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("dd.MM.yyyy");
private DateTime selectedDate;
public static AdminFragment newInstance() {
return new AdminFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.admin_fragment, container, false);
binding2 = AdminWorkingTimeControlCardBinding.inflate(LayoutInflater.from(getContext()), container,false);
mViewModel = ViewModelProviders.of(this).get(AdminViewModel.class);
Long userId = getArguments().getLong(WorkersViewModel.workerIdToAdminTag);
Log.d("work_tag", "Получил юзер Id: " + Long.toString(userId));
mViewModel.getUsersActivities(userId).observe(AdminFragment.this,
calendarEvents -> binding.agendaCalendarView.init(calendarEvents,
mViewModel.minDate, mViewModel.maxDate, Locale.getDefault(), this));
binding.agendaCalendarView.addEventRenderer(new ActivityEventRenderer(binding2));
return binding.getRoot();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = ViewModelProviders.of(this).get(AdminViewModel.class);
binding.setModel(mViewModel);
}
@Override
public void onDaySelected(DayItem dayItem) {
selectedDate = new DateTime(dayItem.getDate());
binding.currentDateTextView.setText(selectedDate.toString(dateTimeFormatter));
}
@Override
public void onEventSelected(CalendarEvent event) {
Toast.makeText(getContext(), String.format("Selected event: %s", event), Toast.LENGTH_SHORT).show();
}
@Override
public void onScrollToDate(Calendar calendar) {
selectedDate = new DateTime(calendar.getTime());
binding.currentDateTextView.setText(selectedDate.toString(dateTimeFormatter));
}
Рендерер для пользовательского макета:
public class ActivityEventRenderer extends EventRenderer<ActivityEvent> {
AdminWorkingTimeControlCardBinding binding;
public ActivityEventRenderer(AdminWorkingTimeControlCardBinding binding) {
this.binding = binding;
}
@Override
public void render(View view, ActivityEvent event) {
bind(event);
}
void bind(ActivityEvent event) {
binding.statusTextView.setText(event.getTitle());
binding.commentTextView.setText(event.getDescription());
binding.timeButton.setText("12;00");
binding.executePendingBindings();
}
@Override
public int getEventLayout() {
return R.layout.admin_working_time_control_card;
}
@Override
public Class<ActivityEvent> getRenderType() {
return ActivityEvent.class;
}
Когда я запускаю свой код, я получаю:
Process: com.gu.team.workingtimecontrol, PID: 1739
java.lang.NullPointerException
at com.github.tibolte.agendacalendarview.AgendaCalendarView.addEventRenderer(AgendaCalendarView.java:210)
at com.gu.team.workingtimecontrol.ui.fragments.AdminFragment.onCreateView(AdminFragment.java:60)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2646)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2416)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2372)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)