77
88import AndroidKit
99
10- /// SwitUI View for Android `android.widget.ListView`
10+ /// SwiftUI `List` for Android, backed by a Jetpack Compose `LazyColumn`.
1111public struct AndroidListView {
1212
1313 let items : [ String ]
@@ -18,47 +18,20 @@ public struct AndroidListView {
1818}
1919
2020extension AndroidListView : AndroidViewRepresentable {
21-
21+
2222 /// Creates the view object and configures its initial state.
23- public func makeAndroidView( context: Self . Context ) -> ListView {
24- createView ( context: context. androidContext)
25- }
26-
27- /// Updates the state of the specified view with new information from SwiftUI.
28- public func updateAndroidView( _ view: ListView , context: Self . Context ) {
29- updateView ( view)
23+ public func makeAndroidView( context: Self . Context ) -> ComposeListView {
24+ let adapter = ListViewAdapter ( swiftObject: SwiftObject ( ListViewAdapter . Context ( items: items) ) )
25+ return ComposeListView ( context. androidContext, adapter)
3026 }
31- }
3227
33- extension AndroidListView {
34-
35- func createView( context: AndroidContent . Context ) -> AndroidWidget . ListView {
36- let view = AndroidWidget . ListView ( context)
37- updateView ( view)
38- return view
39- }
40-
41- func updateView( _ view: AndroidWidget . ListView ) {
42- let layout = try ! JavaClass < R . layout > ( )
43- let resource = layout. simple_list_item_1
44- let objects : [ JavaObject ? ] = items. map { JavaString ( $0) }
45- let adapter = ArrayAdapter < JavaObject > (
46- context: view. getContext ( ) ,
47- resource: resource,
48- objects: objects
49- )
50- view. setAdapter ( adapter. as ( Adapter . self) )
28+ /// Updates the state of the specified view with new information from SwiftUI.
29+ public func updateAndroidView( _ view: ComposeListView , context: Self . Context ) {
30+ guard let adapter = view. getAdapter ( ) else {
31+ assertionFailure ( " Missing adapter " )
32+ return
33+ }
34+ adapter. context = ListViewAdapter . Context ( items: items)
35+ view. refresh ( )
5136 }
5237}
53-
54- extension JavaClass < R . layout > {
55-
56- @JavaStaticField ( isFinal: true )
57- public var list_view_row : Int32
58- }
59-
60- extension JavaClass < R . id > {
61-
62- @JavaStaticField ( isFinal: true )
63- public var textView : Int32
64- }
0 commit comments