Не могу связать пользовательский рендерер - PullRequest
0 голосов
/ 23 октября 2018

Я использую библиотеку 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)
...