android - 无法绑定自定义渲染器
问题描述
我使用 AgendaCalendarView 库并想设置我的自定义布局,但我不知道如何。当我尝试不添加自定义布局时,一切正常。我浏览了很多例子,但没有找到任何东西。是否可以绑定此渲染?
我的片段:
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)
解决方案
推荐阅读
- python - 蟒蛇 | 修改未绑定对象仍然修改两者
- r - Shiny传单地图中标记的选择性更新
- wso2 - 如何使用租户管理员凭据登录 WSO2 IS Analytics 门户?
- c++ - 在苹果 m1 上的 Clion 版本中找不到 bits/stdc++.h' 文件
- sql - 通过 GraphQL 返回 sql/postGIS 创建的视图
- vue.js - HTML 拖放 api getdata undefined
- php - 试用期系统连同订阅 - PHP 和 MySQL
- javascript - 从另一个对象构建对象,该对象将其键与数组中的值进行比较
- node.js - Azure 函数未登录 AppInsights 中的所有跟踪
- sparql - 如何使用 rdf4j 构造长查询