swipe_refresh_demo_v2/
swipe_refresh_demo_v2.rs1use termux_gui::{Activity, Result};
6use termux_gui::connection::read_message;
7use std::time::Duration;
8use std::thread;
9
10fn main() -> Result<()> {
11 println!("=== SwipeRefreshLayout 下拉刷新演示 (新库版本) ===\n");
12
13 let mut activity = Activity::new(false)?;
15 println!("✓ 连接建立\n");
16
17 let swipe_refresh = activity.create_swipe_refresh_layout(None)?;
19
20 let layout = activity.create_linear_layout(Some(swipe_refresh.id()))?;
22 let title = activity.create_text_view("🔄 下拉刷新演示", Some(layout.id()))?;
27 title.set_text_size(&mut activity, 26)?;
28 title.view().set_margin(&mut activity, 10)?;
29 title.view().set_height_wrap_content(&mut activity)?;
30 title.view().set_linear_layout_params(&mut activity, 0, None)?;
31
32 let desc = activity.create_text_view("向下拉动页面触发刷新", Some(layout.id()))?;
34 desc.view().set_margin(&mut activity, 5)?;
35 desc.view().set_height_wrap_content(&mut activity)?;
36 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 let divider1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
40 divider1.view().set_margin(&mut activity, 10)?;
41 divider1.view().set_height_wrap_content(&mut activity)?;
42 divider1.view().set_linear_layout_params(&mut activity, 0, None)?;
43
44 let refresh_count = activity.create_text_view("刷新次数: 0", Some(layout.id()))?;
46 refresh_count.set_text_size(&mut activity, 24)?;
47 refresh_count.view().set_margin(&mut activity, 10)?;
48 refresh_count.view().set_height_wrap_content(&mut activity)?;
49 refresh_count.view().set_linear_layout_params(&mut activity, 0, None)?;
50 refresh_count.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
51
52 let last_time = activity.create_text_view("最后刷新: 尚未刷新", Some(layout.id()))?;
54 last_time.view().set_margin(&mut activity, 10)?;
55 last_time.view().set_height_wrap_content(&mut activity)?;
56 last_time.view().set_linear_layout_params(&mut activity, 0, None)?;
57 last_time.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
58
59 let divider2 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
61 divider2.view().set_margin(&mut activity, 10)?;
62 divider2.view().set_height_wrap_content(&mut activity)?;
63 divider2.view().set_linear_layout_params(&mut activity, 0, None)?;
64
65 let content_title = activity.create_text_view("📋 内容列表", Some(layout.id()))?;
67 content_title.set_text_size(&mut activity, 18)?;
68 content_title.view().set_margin(&mut activity, 10)?;
69 content_title.view().set_height_wrap_content(&mut activity)?;
70 content_title.view().set_linear_layout_params(&mut activity, 0, None)?;
71 content_title.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
72
73 let item1 = activity.create_text_view("📄 项目 1", Some(layout.id()))?;
75 item1.view().set_margin(&mut activity, 8)?;
76 item1.view().set_height_wrap_content(&mut activity)?;
77 item1.view().set_linear_layout_params(&mut activity, 0, None)?;
78
79 let item2 = activity.create_text_view("📄 项目 2", Some(layout.id()))?;
80 item2.view().set_margin(&mut activity, 8)?;
81 item2.view().set_height_wrap_content(&mut activity)?;
82 item2.view().set_linear_layout_params(&mut activity, 0, None)?;
83
84 let item3 = activity.create_text_view("📄 项目 3", Some(layout.id()))?;
85 item3.view().set_margin(&mut activity, 8)?;
86 item3.view().set_height_wrap_content(&mut activity)?;
87 item3.view().set_linear_layout_params(&mut activity, 0, None)?;
88
89 let divider3 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
91 divider3.view().set_margin(&mut activity, 10)?;
92 divider3.view().set_height_wrap_content(&mut activity)?;
93 divider3.view().set_linear_layout_params(&mut activity, 0, None)?;
94
95 let info = activity.create_text_view(
97 "💡 向下拉动页面刷新\n或点击下方按钮手动刷新",
98 Some(layout.id())
99 )?;
100 info.view().set_margin(&mut activity, 10)?;
101 info.view().set_height_wrap_content(&mut activity)?;
102 info.view().set_linear_layout_params(&mut activity, 0, None)?;
103 info.set_text_color(&mut activity, 0xFF999999u32 as i32)?;
104
105 let manual_btn = activity.create_button("🔄 手动刷新", Some(layout.id()))?;
107 manual_btn.view().set_margin(&mut activity, 10)?;
108 manual_btn.view().set_linear_layout_params(&mut activity, 0, None)?;
109
110 println!("✓ 界面创建完成\n");
111 println!("━━━━━━━━━━━━━━━━━━━━━━");
112 println!("提示:");
113 println!(" • 向下拉动页面触发刷新");
114 println!(" • 或点击按钮手动刷新");
115 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
116
117 let mut refresh_counter = 0;
118
119 loop {
121 let event = read_message(activity.event_stream())?;
122 let event_type = event["type"].as_str().unwrap_or("");
123 let event_value = &event["value"];
124
125 match event_type {
126 "destroy" => {
127 println!("\n✓ Activity 已关闭");
128 return Ok(());
129 },
130 "refresh" => {
131 println!("🔄 下拉刷新触发!");
132
133 refresh_counter += 1;
134 refresh_count.set_text(&mut activity, &format!("刷新次数: {}", refresh_counter))?;
135
136 let now = std::time::SystemTime::now()
138 .duration_since(std::time::UNIX_EPOCH)
139 .unwrap()
140 .as_secs();
141 last_time.set_text(&mut activity, &format!("最后刷新: {} 秒", now % 10000))?;
142
143 item1.set_text(&mut activity, &format!("📄 项目 1 (刷新 #{})", refresh_counter))?;
145 item2.set_text(&mut activity, &format!("📄 项目 2 (刷新 #{})", refresh_counter))?;
146 item3.set_text(&mut activity, &format!("📄 项目 3 (刷新 #{})", refresh_counter))?;
147
148 println!("⏳ 模拟加载中...");
149 thread::sleep(Duration::from_secs(2));
150
151 swipe_refresh.set_refreshing(&mut activity, false)?;
152 println!("✅ 刷新完成!\n");
153 },
154 "click" => {
155 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
156
157 if clicked_id == manual_btn.id() {
158 println!("🔄 手动刷新触发!");
159
160 swipe_refresh.set_refreshing(&mut activity, true)?;
161
162 refresh_counter += 1;
163 refresh_count.set_text(&mut activity, &format!("刷新次数: {}", refresh_counter))?;
164
165 item1.set_text(&mut activity, &format!("📄 项目 1 (刷新 #{})", refresh_counter))?;
166 item2.set_text(&mut activity, &format!("📄 项目 2 (刷新 #{})", refresh_counter))?;
167 item3.set_text(&mut activity, &format!("📄 项目 3 (刷新 #{})", refresh_counter))?;
168
169 println!("⏳ 模拟加载中...");
170 thread::sleep(Duration::from_secs(2));
171
172 swipe_refresh.set_refreshing(&mut activity, false)?;
173 println!("✅ 刷新完成!\n");
174 }
175 },
176 _ => {}
177 }
178 }
179}