Skip to content

Commit ad040e9

Browse files
committed
Back AndroidListView with ComposeListView instead of ArrayAdapter
1 parent 98935a6 commit ad040e9

1 file changed

Lines changed: 13 additions & 40 deletions

File tree

Sources/AndroidSwiftUI/AndroidListView.swift

Lines changed: 13 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import AndroidKit
99

10-
/// SwitUI View for Android `android.widget.ListView`
10+
/// SwiftUI `List` for Android, backed by a Jetpack Compose `LazyColumn`.
1111
public struct AndroidListView {
1212

1313
let items: [String]
@@ -18,47 +18,20 @@ public struct AndroidListView {
1818
}
1919

2020
extension 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

Comments
 (0)