-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Description
2026 update: Task List
- Audit adapter/ViewHolder usage: chore: convert GradeNowDialog to ViewBinding #19565 (comment)
- Remove the merge tag in toolbar.xml
- it's not needed(we already have a single view as root and we don't append this included layout to a Toolbar view) and it also breaks ViewBinding(Missing required view with ID:
com.ichi2.anki.debug:id/toolbar).
- it's not needed(we already have a single view as root and we don't append this included layout to a Toolbar view) and it also breaks ViewBinding(Missing required view with ID:
- architecture review: vendor 'vbpd' David Allison 18/09/2025, 14:50
- refactor: use
BrowserColumnCellBindingDavid Allison 12/09/2025, 04:53 - refactor: remove 'layout' from MultimediaFragment David Allison 12/09/2025, 02:51
- chore: convert MultimediaImageFragment to ViewBinding David Allison 12/09/2025, 02:49
- chore: convert DeckSelectionDialog to ViewBinding David Allison 12/09/2025, 02:33
- chore: convert BrowserColumnSelectionFragment to ViewBinding David Allison 12/09/2025, 02:26
- chore: convert FlagAdapter to ViewBinding David Allison 12/09/2025, 02:24
- chore: convert RepositionCardFragment to ViewBinding David Allison 12/09/2025, 01:55
- chore: convert FindAndReplaceDialogFragment to ViewBinding David Allison 12/09/2025, 01:47
- chore: convert ColumnSelectionDialogFragment to ViewBinding David Allison 12/09/2025, 01:42
- chore: convert ResizingDivider to ViewBinding David Allison 12/09/2025, 01:35
- chore: convert AboutFragment to ViewBinding David Allison 12/09/2025, 01:27
- chore: convert AudioRecordView to ViewBinding David Allison 12/09/2025, 01:20
- chore: convert MultiColumnViewHolder to ViewBinding David Allison 12/09/2025, 01:16
- chore: convert ControlPreferenceDialogFragment to ViewBinding David Allison 12/09/2025, 01:09
- chore: convert GesturePicker to ViewBinding David Allison 12/09/2025, 01:06
- chore: convert AlertDialogFacade to ViewBinding David Allison 12/09/2025, 01:02
- chore: convert TemplatePreviewerPage to ViewBinding David Allison 12/09/2025, 00:29
- ! chore: convert SettingsFragment to ViewBinding David Allison 12/09/2025, 00:24
- chore: convert KeyPicker to ViewBinding David Allison 12/09/2025, 00:18
- chore: convert MultimediaBottomSheet to ViewBinding #19620
- chore: convert AudioVideoFragment to ViewBinding David Allison 11/09/2025, 23:57
- chore: convert AudioRecordingFragment to ViewBinding David Allison 11/09/2025, 23:48
- chore: convert HelpDialog to ViewBinding #20083
- chore: convert AxisPicker; AxisSelector; GestureDisplay to ViewBinding #19564
- chore: convert DeckPickerFloatingActionMenu to ViewBinding #20081
- chore: convert ScheduleRemindersAdapter to ViewBinding #20080
- chore: convert SharedDecksDownloadFragment to ViewBinding #20079
- chore: convert NoteTypesAdapter to ViewBinding #20076
- chore: convert TagLimitFragment & IncludedExcludedTagsAdapter to ViewBinding #20075
- refactor(custom-study): use userInputValue #20074
- CustomStudyDialog: 12ef705
- chore: convert SchedulerReminders to ViewBinding #20012
- WhiteboardFragment: 8e869ad
- chore: convert CheckPronunciationFragment to ViewBinding #20011
- chore: convert PreviewerFragment to ViewBinding #20010
- chore: convert ReviewerMenuView to ViewBinding #20009
- chore: convert ReviewerMenuSettingsFragment to ViewBinding #20008
- chore: convert ReviewerMenuSettingsAdapter to ViewBinding & document class #19621
- chore: convert AudioPlayView to ViewBinding #19900
- refactor: remove DeckDropDownAdapter #19899
- chore: convert TagsDialog to ViewBinding #19894
- chore: convert EditDeckDescriptionDialog to ViewBinding #19566
- chore: convert EmptyCardsDialogFragment to ViewBinding #19637
- chore: convert FlagRenameDialog to ViewBinding #19892
- chore: convert SavedBrowserSearchesDialogFragment to ViewBinding #19891
- chore: convert LocaleSelectionDialog to ViewBinding #19890
- chore: convert TtsVoicesDialogFragment to ViewBinding #19482
- chore: convert GradeNowDialog to ViewBinding #19565
- chore: convert BrowserOptionsDialog to ViewBinding #19591
- chore: convert ExportDialogFragment to ViewBinding #19889
- chore: convert BrowserColumnSelectionAdapter to ViewBinding #19608
- chore: convert NoteFieldAdapter to ViewBinding #19888
- chore: convert ImageCropper to ViewBinding #19708
- chore: convert ForgetCardsDialog to ViewBinding #19593
- chore: convert WidgetConfigScreenAdapter to ViewBinding #19707
- chore: convert TagsArrayAdapter to ViewBinding #19706
- chore: convert DeckAdapter.ViewHolder to ViewBinding #19705
- chore: convert MediaCheckFragment to ViewBinding #19568
- chore: convert AddNewNotesType to ViewBinding #19704
- chore: convert ReviewerFragment to ViewBinding #19496
- chore: convert FieldEditLine to ViewBinding #19567
- chore: convert SetDueDateDialog to ViewBinding #19483
- refactor: remove unused layout from PermissionsFragment David Allison 11/09/2025, 01:08
- chore: convert AllPermissionsExplanationFragment to ViewBinding David Allison 12/09/2025, 02:40
- chore: convert PermissionsUntil29Fragment to ViewBinding David Allison 11/09/2025, 01:07
- chore: convert PermissionsStartingAt30Fragment to ViewBinding David Allison 11/09/2025, 01:06
- chore: convert PermissionsItem to ViewBinding #19525
- chore: convert SetupCollectionFragment to ViewBinding #19524
- ImageOcclusionBottomSheetFragment
- chore: convert TtsVoicesDialogFragment to ViewBinding #19482
- chore: convert InstantNoteEditorActivity to ViewBinding David Allison 11/09/2025, 00:33
- chore: convert CardAnalysisWidgetConfig to ViewBinding #19523
- chore: convert DeckPickerWidgetConfig to ViewBinding #19522
- refactor: IntroductionActivity (ViewBinding) #19526
- chore: convert SharedDecksActivity to ViewBinding #19521
- chore: convert CardTemplateBrowserAppearanceEditor to ViewBinding #19511
- chore: convert TemplatePreviewerFragment to ViewBinding #19520
- chore: convert CardTemplateEditor to ViewBinding #19502
- chore: convert SingleFragmentActivity to be ViewBinding compatible #19501
- chore: convert AnkiDroidCrashReportDialog to ViewBinding David Allison 10/09/2025, 22:41
- chore: convert Info to ViewBinding #19471
-
chore: convert Preferences to ViewBinding David Allison 10/09/2025, 22:27 - chore: convert MultimediaActivity to ViewBinding #19442
- chore: convert NoteTypeFieldEditor to ViewBinding #19440
- chore: convert PermissionsActivity to ViewBinding David Allison 10/09/2025, 21:47
- chore: convert ManageNotetypes to ViewBinding #19439
- chore: convert CardBrowser to ViewBinding #19429
- chore: convert StudyOptionsFragment to ViewBinding David Allison 10/09/2025, 21:12
- chore: convert StudyOptionsActivity to ViewBinding #19428
- chore: convert DeckPicker to ViewBinding #19420
- chore: convert DrawingActivity to ViewBinding David Allison 10/09/2025, 18:57
Implement View Binding
Advantages of using it over findViewById
Null safety – Properties in the generated class are non-null. In the case of multiple layout versions, e.g. layout file for different screen orientation or size, if some configuration contains an id that is not present in others, the generated property will be nullable.
Type safety – Binding properties will be correctly typed, even with custom views.
Describe the solution you'd like
I will try to implement ViewiBinding for all activities and fragments.
Describe alternatives you've considered
This issue can be marked as good first issue so it will be helpful for new contributors. I will make a readme for this issue which have all the information about how to implement viewBinding for activities and fragments .
Additional context
Advantages
Interoperability – Generated classes are in Java and are optimized for Kotlin-Java interoperability.
Injection capability – Generated class can be injected in activity or fragment.
Speed – There are no impacts on build speed, as it doesn’t use an annotation processor. After the first build with View Binding is enabled, it will dynamically generate new properties. And if you add new view elements to your XML, there is no need to rebuild every time