Skip to content

Commit 45c4532

Browse files
committed
Update RecyclerViewAdapter
1 parent 84b9f54 commit 45c4532

File tree

2 files changed

+57
-15
lines changed

2 files changed

+57
-15
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder
88
class RecyclerViewAdapter(val swiftObject: SwiftObject) :
99
RecyclerView.Adapter<ViewHolder>() {
1010

11-
class ViewHolder(val view: View, val swiftObject: SwiftObject) : RecyclerView.ViewHolder(view) {
11+
class ViewHolder(view: View, val swiftObject: SwiftObject) : RecyclerView.ViewHolder(view) {
1212

1313
}
1414

1515
// Create new views (invoked by the layout manager)
1616
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewAdapter.ViewHolder {
17-
return onCreateViewHolderSwift(parent, viewType)
17+
val viewHolder = onCreateViewHolderSwift(parent, viewType)
18+
check(viewHolder.itemView != null) {
19+
("ViewHolder.itemView == nil")
20+
}
21+
return viewHolder
1822
}
1923

2024
external fun onCreateViewHolderSwift(parent: ViewGroup, viewType: Int): RecyclerViewAdapter.ViewHolder

Demo/app/src/main/swift/RecyclerView.swift

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,44 +21,82 @@ open class RecyclerViewAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder> {
2121
extension RecyclerViewAdapter {
2222

2323
@JavaMethod
24-
public func onCreateViewHolderSwift(_ viewGroup: ViewGroup?, _ viewType: Int32) -> RecyclerView.ViewHolder! {
25-
callback.onCreateViewHolder(viewGroup, viewType)
24+
public func onCreateViewHolderSwift(_ viewGroup: ViewGroup?, _ viewType: Int32) -> RecyclerView.ViewHolder? {
25+
log("\(self).\(#function) \(viewType)")
26+
return callback.onCreateViewHolder?(viewGroup!, viewType)
2627
}
2728

2829
@JavaMethod
2930
public func onBindViewHolderSwift(_ viewHolder: RecyclerView.ViewHolder?, _ position: Int32) {
30-
callback.onBindViewHolder(viewHolder, position)
31+
log("\(self).\(#function) \(position)")
32+
callback.onBindViewHolder?(viewHolder!, position)
3133
}
3234

3335
@JavaMethod
3436
public func getItemCountSwift() -> Int32 {
35-
callback.getItemCount()
37+
log("\(self).\(#function)")
38+
return callback.getItemCount()
39+
}
40+
}
41+
42+
extension RecyclerViewAdapter {
43+
44+
static var logTag: LogTag { "RecyclerViewAdapter" }
45+
46+
static func log(_ string: String) {
47+
try? AndroidLogger(tag: logTag, priority: .debug)
48+
.log(string)
49+
}
50+
51+
static func logInfo(_ string: String) {
52+
try? AndroidLogger(tag: logTag, priority: .info)
53+
.log(string)
54+
}
55+
56+
static func logError(_ string: String) {
57+
try? AndroidLogger(tag: logTag, priority: .error)
58+
.log(string)
59+
}
60+
61+
func log(_ string: String) {
62+
Self.log(string)
63+
}
64+
65+
func logError(_ string: String) {
66+
Self.logError(string)
3667
}
3768
}
3869

3970
public extension RecyclerViewAdapter {
4071

41-
struct Callback<T> {
72+
struct Callback {
4273

4374
var onCreateViewHolder: ((ViewGroup, Int32) -> RecyclerView.ViewHolder)?
4475

45-
var onBindViewHolder: ((RecyclerViewAdapter.ViewHolder<T>, Int32) -> ())?
76+
var onBindViewHolder: ((RecyclerView.ViewHolder, Int32) -> ())?
4677

47-
var getItemCount: () -> Int32 = { return 0 }
78+
var getItemCount: () -> Int32
4879

49-
public init(onCreateViewHolder: ((ViewGroup, Int32) -> RecyclerView.ViewHolder)? = nil, onBindViewHolder: ((RecyclerView.ViewHolder, Int32) -> Void)? = nil, getItemCount: @escaping () -> Int32) {
80+
public init(
81+
onCreateViewHolder: ((ViewGroup, Int32) -> RecyclerView.ViewHolder)? = nil,
82+
onBindViewHolder: ((RecyclerView.ViewHolder, Int32) -> Void)? = nil,
83+
getItemCount: @escaping () -> Int32 = { return 0 }
84+
) {
5085
self.onCreateViewHolder = onCreateViewHolder
5186
self.onBindViewHolder = onBindViewHolder
5287
self.getItemCount = getItemCount
5388
}
5489
}
90+
}
91+
92+
public extension RecyclerViewAdapter {
5593

5694
convenience init(_ callback: Callback, environment: JNIEnvironment? = nil) {
5795
let swiftObject = SwiftObject(callback, environment: environment)
5896
self.init(swiftObject: swiftObject, environment: environment)
5997
}
6098

61-
var callback: Callback<T> {
99+
var callback: Callback {
62100
get {
63101
getSwiftObject().valueObject().value as! Callback
64102
}
@@ -71,7 +109,7 @@ public extension RecyclerViewAdapter {
71109
extension RecyclerViewAdapter {
72110

73111
@JavaClass("com.pureswift.swiftandroid.RecyclerViewAdapter$ViewHolder")
74-
open class ViewHolder<T>: RecyclerView.ViewHolder {
112+
open class ViewHolder: RecyclerView.ViewHolder {
75113

76114
@JavaMethod
77115
@_nonoverride public convenience init(view: AndroidView.View?, swiftObject: SwiftObject?, environment: JNIEnvironment? = nil)
@@ -83,14 +121,14 @@ extension RecyclerViewAdapter {
83121

84122
public extension RecyclerViewAdapter.ViewHolder {
85123

86-
convenience init(_ value: T, view: AndroidView.View?, environment: JNIEnvironment? = nil) {
124+
convenience init(_ value: Any, view: AndroidView.View?, environment: JNIEnvironment? = nil) {
87125
let swiftObject = SwiftObject(value, environment: environment)
88126
self.init(view: view, swiftObject: swiftObject, environment: environment)
89127
}
90128

91-
var value: T {
129+
var value: Any {
92130
get {
93-
getSwiftObject().valueObject().value as! T
131+
getSwiftObject().valueObject().value
94132
}
95133
set {
96134
getSwiftObject().valueObject().value = newValue

0 commit comments

Comments
 (0)