Skip to content

Commit cd7eada

Browse files
committed
Add ListViewAdapter.Context
1 parent 9ccb777 commit cd7eada

4 files changed

Lines changed: 47 additions & 22 deletions

File tree

Demo/App.swiftpm/Sources/ContentView.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,22 @@ struct ContentView: View {
2323
}
2424

2525
var body: some View {
26-
HStack {
26+
VStack {/*
2727
HStack {
2828
VStack(spacing: 20) {
2929
Image("globe")
3030
Text("Hello World")
3131
Text(verbatim: date.formatted(date: .numeric, time: .complete))
32-
HStack {
33-
Text("Counter:")
34-
Text(verbatim: counter.description)
32+
if counter > 0 {
33+
HStack {
34+
Text("Counter:")
35+
Text(verbatim: counter.description)
36+
}
3537
}
3638
Button("Increment") {
3739
counter += 1
3840
if counter > 20 {
39-
counter = 1
41+
counter = 0
4042
}
4143
}
4244
}
@@ -57,11 +59,11 @@ struct ContentView: View {
5759
task?.cancel()
5860
task = nil
5961
}
62+
}*/
63+
List(items) { item in
64+
Text(verbatim: item.title)
6065
}
6166
}
62-
List(items) { item in
63-
Text(verbatim: item.title)
64-
}
6567
}
6668
}
6769

Demo/app/src/main/java/com/pureswift/swiftandroid/ListViewAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import android.view.View
55
import android.view.ViewGroup
66
import android.widget.ListAdapter
77

8-
class ListViewAdapter(val swiftObject: SwiftObject): ListAdapter {
8+
class ListViewAdapter(val context: SwiftObject): ListAdapter {
99

1010
external override fun getCount(): Int
1111

Sources/AndroidSwiftUI/AndroidListView.swift

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,16 @@ extension AndroidListView {
3434

3535
func createView(context: AndroidContent.Context) -> AndroidWidget.ListView {
3636
let view = AndroidWidget.ListView(context)
37-
updateView(view)
37+
let adapterContext = ListViewAdapter.Context(items: items)
38+
let swiftObject = SwiftObject(adapterContext)
39+
let adapter = ListViewAdapter(swiftObject: swiftObject)
40+
view.setAdapter(adapter.as(Adapter.self))
3841
return view
3942
}
4043

4144
func updateView(_ view: AndroidWidget.ListView) {
42-
//let adapter = view.getAdapter().as(ArrayAdapter<JavaString>.self) as! ArrayAdapter<JavaString>
43-
//adapter.clear()
44-
let adapter = ArrayAdapter<JavaString>()
45-
for item in self.items {
46-
adapter.add(JavaString(item))
47-
}
48-
view.setAdapter(adapter.as(Adapter.self))
45+
let adapterContext = ListViewAdapter.Context(items: items)
46+
let adapter = view.getAdapter().as(ListViewAdapter.self) as! ListViewAdapter
47+
adapter.context = adapterContext
4948
}
5049
}

Sources/AndroidSwiftUI/ListViewAdapter.swift

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,22 @@ extension ListViewAdapter {
2828

2929
@JavaMethod
3030
func isEmpty() -> Bool {
31-
true
31+
context.items.isEmpty
3232
}
3333

3434
@JavaMethod
3535
func getCount() -> Int32 {
36-
0
36+
Int32(context.items.count)
3737
}
3838

3939
@JavaMethod
4040
func getItem(position: Int32) -> JavaObject? {
41-
nil
41+
JavaString(context.items[Int(position)])
4242
}
4343

4444
@JavaMethod
4545
func getItemId(position: Int32) -> Int64 {
46-
0
46+
Int64(position)
4747
}
4848

4949
@JavaMethod
@@ -58,7 +58,14 @@ extension ListViewAdapter {
5858

5959
@JavaMethod
6060
func getView(position: Int32, convertView: AndroidView.View?, parent: ViewGroup?) -> AndroidView.View? {
61-
nil
61+
guard let parent else {
62+
assertionFailure()
63+
return nil
64+
}
65+
let view = TextView(parent.getContext())
66+
let item = context.items[Int(position)]
67+
view.text = item
68+
return view
6269
}
6370

6471
@JavaMethod
@@ -82,6 +89,23 @@ extension ListViewAdapter {
8289
}
8390
}
8491

92+
extension ListViewAdapter {
93+
94+
struct Context {
95+
96+
let items: [String]
97+
}
98+
99+
var context: Context {
100+
get {
101+
getContext().valueObject().value as! Context
102+
}
103+
set {
104+
getContext().valueObject().value = newValue
105+
}
106+
}
107+
}
108+
85109
extension ListViewAdapter {
86110

87111
static var logTag: String { "ListViewAdapter" }

0 commit comments

Comments
 (0)