Skip to content

Commit d417237

Browse files
committed
Add PythonNative Page subclasses
1 parent 604530d commit d417237

File tree

3 files changed

+134
-6
lines changed

3 files changed

+134
-6
lines changed

apps/android_pythonnative_3/app/src/main/java/com/pythonnative/pythonnative/MainActivity.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@ class MainActivity : AppCompatActivity() {
4040
val py = Python.getInstance()
4141

4242
// Create an instance of the Page class
43-
val pyModule = py.getModule("app/main_2")
44-
page = pyModule.callAttr("Page", this)
43+
// val pyModule = py.getModule("app/main_2")
44+
// page = pyModule.callAttr("Page", this)
45+
// val pyLayout = page.callAttr("on_create").toJava(View::class.java)
46+
// setContentView(pyLayout)
4547

46-
val pyLayout = page.callAttr("on_create").toJava(View::class.java)
47-
setContentView(pyLayout)
48+
// Create an instance of the Page class
49+
val pyModule = py.getModule("app/main_3")
50+
page = pyModule.callAttr("MainPage", this)
51+
page.callAttr("on_create")
4852

4953
// val pyModule = py.getModule("app/main")
5054
// val pyLayout = pyModule.callAttr("on_create", this).toJava(View::class.java)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import pythonnative as pn
2+
3+
4+
class MainPage(pn.Page):
5+
def __init__(self, context):
6+
super().__init__()
7+
self.context = context
8+
9+
def on_create(self):
10+
super().on_create()
11+
12+
def on_start(self):
13+
super().on_start()
14+
15+
def on_resume(self):
16+
super().on_resume()
17+
18+
def on_pause(self):
19+
super().on_pause()
20+
21+
def on_stop(self):
22+
super().on_stop()
23+
24+
def on_destroy(self):
25+
super().on_destroy()
26+
27+
def on_restart(self):
28+
super().on_restart()
29+
30+
def on_save_instance_state(self):
31+
super().on_save_instance_state()
32+
33+
def on_restore_instance_state(self):
34+
super().on_restore_instance_state()

libs/pythonnative/pythonnative/page.py

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,42 @@ def set_layout(self, layout) -> None:
2525
def show(self) -> None:
2626
pass
2727

28+
@abstractmethod
29+
def on_create(self):
30+
pass
31+
32+
@abstractmethod
33+
def on_start(self):
34+
pass
35+
36+
@abstractmethod
37+
def on_resume(self):
38+
pass
39+
40+
@abstractmethod
41+
def on_pause(self):
42+
pass
43+
44+
@abstractmethod
45+
def on_stop(self):
46+
pass
47+
48+
@abstractmethod
49+
def on_destroy(self):
50+
pass
51+
52+
@abstractmethod
53+
def on_restart(self):
54+
pass
55+
56+
@abstractmethod
57+
def on_save_instance_state(self):
58+
pass
59+
60+
@abstractmethod
61+
def on_restore_instance_state(self):
62+
pass
63+
2864

2965
if IS_ANDROID:
3066
# ========================================
@@ -37,7 +73,7 @@ class Page(PageBase, ViewBase):
3773
def __init__(self):
3874
super().__init__()
3975
self.native_class = jclass("android.app.Activity")
40-
self.native_instance = self.native_class()
76+
# self.native_instance = self.native_class()
4177

4278
def add_view(self, view):
4379
if self.layout is None:
@@ -52,6 +88,33 @@ def show(self):
5288
# This method should contain code to start the Activity
5389
pass
5490

91+
def on_create(self):
92+
print("Android on_create() called")
93+
94+
def on_start(self):
95+
print("Android on_start() called")
96+
97+
def on_resume(self):
98+
print("Android on_resume() called")
99+
100+
def on_pause(self):
101+
print("Android on_pause() called")
102+
103+
def on_stop(self):
104+
print("Android on_stop() called")
105+
106+
def on_destroy(self):
107+
print("Android on_destroy() called")
108+
109+
def on_restart(self):
110+
print("Android on_restart() called")
111+
112+
def on_save_instance_state(self):
113+
print("Android on_save_instance_state() called")
114+
115+
def on_restore_instance_state(self):
116+
print("Android on_restore_instance_state() called")
117+
55118
else:
56119
# ========================================
57120
# iOS class
@@ -63,7 +126,7 @@ class Page(PageBase, ViewBase):
63126
def __init__(self):
64127
super().__init__()
65128
self.native_class = ObjCClass("UIViewController")
66-
self.native_instance = self.native_class.alloc().init()
129+
# self.native_instance = self.native_class.alloc().init()
67130

68131
def add_view(self, view):
69132
if self.layout is None:
@@ -77,3 +140,30 @@ def set_layout(self, layout):
77140
def show(self):
78141
# This method should contain code to present the ViewController
79142
pass
143+
144+
def on_create(self):
145+
print("iOS on_create() called")
146+
147+
def on_start(self):
148+
print("iOS on_start() called")
149+
150+
def on_resume(self):
151+
print("iOS on_resume() called")
152+
153+
def on_pause(self):
154+
print("iOS on_pause() called")
155+
156+
def on_stop(self):
157+
print("iOS on_stop() called")
158+
159+
def on_destroy(self):
160+
print("iOS on_destroy() called")
161+
162+
def on_restart(self):
163+
print("iOS on_restart() called")
164+
165+
def on_save_instance_state(self):
166+
print("iOS on_save_instance_state() called")
167+
168+
def on_restore_instance_state(self):
169+
print("iOS on_restore_instance_state() called")

0 commit comments

Comments
 (0)