Spinner

Struct Spinner 

Source
pub struct Spinner { /* private fields */ }
Expand description

A Spinner is a dropdown list

Implementations§

Source§

impl Spinner

Source

pub fn new(activity: &mut Activity, parent: Option<i64>) -> Result<Self>

Create a new Spinner

Source

pub fn id(&self) -> i64

Get the view ID

Examples found in repository?
examples/spinner_demo_v2.rs (line 162)
8fn main() -> Result<()> {
9    println!("=== Spinner 下拉列表演示 (新库版本) ===\n");
10    
11    // 创建 Activity(全屏模式)
12    let mut activity = Activity::new(false)?;
13    println!("✓ 连接建立\n");
14    
15    // 创建 NestedScrollView 作为根布局(支持滚动)
16    let scroll = activity.create_nested_scroll_view(None)?;
17    
18    // 创建主布局(放在 ScrollView 内)
19    let layout = activity.create_linear_layout(Some(scroll.id()))?;
20    layout.view().set_margin(&mut activity, 20)?;
21    
22    // 标题
23    let title = activity.create_text_view("📱 手机订购向导", Some(layout.id()))?;
24    title.set_text_size(&mut activity, 24)?;
25    title.view().set_height_wrap_content(&mut activity)?;
26    title.view().set_linear_layout_params(&mut activity, 0, None)?;
27    
28    // ========== 品牌选择 ==========
29    let brand_label = activity.create_text_view("选择品牌:", Some(layout.id()))?;
30    brand_label.set_text_size(&mut activity, 18)?;
31    brand_label.view().set_margin(&mut activity, 10)?;
32    brand_label.view().set_height_wrap_content(&mut activity)?;
33    brand_label.view().set_linear_layout_params(&mut activity, 0, None)?;
34    
35    let brands = vec!["请选择", "Apple", "Samsung", "Huawei", "Xiaomi", "OPPO", "Vivo"];
36    let brand_spinner = activity.create_spinner(Some(layout.id()))?;
37    brand_spinner.view().set_width_match_parent(&mut activity)?;
38    brand_spinner.view().set_height_wrap_content(&mut activity)?;
39    brand_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
40    brand_spinner.set_list(&mut activity, &brands)?;
41    brand_spinner.refresh(&mut activity)?;
42    
43    // ========== 型号选择 ==========
44    let model_label = activity.create_text_view("选择型号:", Some(layout.id()))?;
45    model_label.set_text_size(&mut activity, 18)?;
46    model_label.view().set_margin(&mut activity, 10)?;
47    model_label.view().set_height_wrap_content(&mut activity)?;
48    model_label.view().set_linear_layout_params(&mut activity, 0, None)?;
49    
50    let model_spinner = activity.create_spinner(Some(layout.id()))?;
51    model_spinner.view().set_width_match_parent(&mut activity)?;
52    model_spinner.view().set_height_wrap_content(&mut activity)?;
53    model_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
54    model_spinner.set_list(&mut activity, &["请先选择品牌"])?;
55    model_spinner.refresh(&mut activity)?;
56    
57    // ========== 容量选择 ==========
58    let storage_label = activity.create_text_view("选择容量:", Some(layout.id()))?;
59    storage_label.set_text_size(&mut activity, 18)?;
60    storage_label.view().set_margin(&mut activity, 10)?;
61    storage_label.view().set_height_wrap_content(&mut activity)?;
62    storage_label.view().set_linear_layout_params(&mut activity, 0, None)?;
63    
64    let storages = vec!["请选择", "64GB", "128GB", "256GB", "512GB", "1TB"];
65    let storage_spinner = activity.create_spinner(Some(layout.id()))?;
66    storage_spinner.view().set_width_match_parent(&mut activity)?;
67    storage_spinner.view().set_height_wrap_content(&mut activity)?;
68    storage_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
69    storage_spinner.set_list(&mut activity, &storages)?;
70    storage_spinner.refresh(&mut activity)?;
71    
72    // ========== 颜色选择 ==========
73    let color_label = activity.create_text_view("选择颜色:", Some(layout.id()))?;
74    color_label.set_text_size(&mut activity, 18)?;
75    color_label.view().set_margin(&mut activity, 10)?;
76    color_label.view().set_height_wrap_content(&mut activity)?;
77    color_label.view().set_linear_layout_params(&mut activity, 0, None)?;
78    
79    let colors = vec!["请选择", "黑色", "白色", "金色", "银色", "蓝色", "紫色", "绿色"];
80    let color_spinner = activity.create_spinner(Some(layout.id()))?;
81    color_spinner.view().set_width_match_parent(&mut activity)?;
82    color_spinner.view().set_height_wrap_content(&mut activity)?;
83    color_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
84    color_spinner.set_list(&mut activity, &colors)?;
85    color_spinner.refresh(&mut activity)?;
86    
87    // ========== 结果显示 ==========
88    let result = activity.create_text_view("请完成选择", Some(layout.id()))?;
89    result.set_text_size(&mut activity, 16)?;
90    result.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
91    result.view().set_margin(&mut activity, 10)?;
92    result.view().set_height_wrap_content(&mut activity)?;
93    result.view().set_linear_layout_params(&mut activity, 0, None)?;
94    
95    // ========== 提交按钮 ==========
96    let submit_btn = activity.create_button("🛒 确认订购", Some(layout.id()))?;
97    submit_btn.view().set_margin(&mut activity, 10)?;
98    submit_btn.view().set_height_wrap_content(&mut activity)?;
99    submit_btn.view().set_linear_layout_params(&mut activity, 0, None)?;
100    
101    println!("✓ 界面创建完成\n");
102    println!("━━━━━━━━━━━━━━━━━━━━━━");
103    println!("提示: 从下拉列表中选择");
104    println!("━━━━━━━━━━━━━━━━━━━━━━\n");
105    
106    // 选择状态
107    let mut brand_selection = String::new();
108    let mut model_selection = String::new();
109    let mut storage_selection = String::new();
110    let mut color_selection = String::new();
111    
112    // 更新结果显示的辅助函数
113    let update_result = |activity: &mut Activity, 
114                         result: &TextView,
115                         brand: &str, 
116                         model: &str, 
117                         storage: &str, 
118                         color: &str| -> Result<()> {
119        let all_selected = !brand.is_empty() && !model.is_empty() 
120                          && !storage.is_empty() && !color.is_empty();
121        
122        let result_text = if all_selected {
123            format!("✅ 已选择:\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}",
124                    brand, model, storage, color)
125        } else {
126            let mut missing = Vec::new();
127            if brand.is_empty() { missing.push("品牌"); }
128            if model.is_empty() { missing.push("型号"); }
129            if storage.is_empty() { missing.push("容量"); }
130            if color.is_empty() { missing.push("颜色"); }
131            format!("⚠️ 待选择: {}", missing.join(", "))
132        };
133        
134        result.set_text(activity, &result_text)?;
135        
136        let text_color = if all_selected { 
137            0xFF4CAF50u32 as i32  // 绿色
138        } else { 
139            0xFF666666u32 as i32  // 灰色
140        };
141        result.set_text_color(activity, text_color)?;
142        
143        Ok(())
144    };
145    
146    // 事件循环
147    loop {
148        let event = read_message(activity.event_stream())?;
149        let event_type = event["type"].as_str().unwrap_or("");
150        let event_value = &event["value"];
151        
152        match event_type {
153            "destroy" => {
154                // Activity 已被系统销毁,直接退出即可
155                println!("\n✓ Activity 已关闭");
156                return Ok(());
157            },
158            "itemselected" => {
159                let view_id = event_value["id"].as_i64().unwrap_or(-1);
160                let index = event_value["index"].as_i64().unwrap_or(0) as usize;
161                
162                if view_id == brand_spinner.id() {
163                    // 品牌选择
164                    if index > 0 && index < brands.len() {
165                        let brand = brands[index];
166                        brand_selection = brand.to_string();
167                        println!("📱 品牌: {}", brand);
168                        
169                        // 根据品牌更新型号列表
170                        let models: Vec<&str> = match brand {
171                            "Apple" => vec!["请选择", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
172                            "Samsung" => vec!["请选择", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
173                            "Huawei" => vec!["请选择", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
174                            "Xiaomi" => vec!["请选择", "14 Ultra", "14 Pro", "14", "13T Pro"],
175                            "OPPO" => vec!["请选择", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
176                            "Vivo" => vec!["请选择", "X100 Pro", "X100", "S18 Pro", "S18"],
177                            _ => vec!["请选择"],
178                        };
179                        
180                        // 更新型号 Spinner
181                        model_spinner.set_list(&mut activity, &models)?;
182                        model_spinner.refresh(&mut activity)?;
183                        
184                        // 重置型号选择
185                        model_selection.clear();
186                    } else {
187                        brand_selection.clear();
188                    }
189                } else if view_id == model_spinner.id() {
190                    // 型号选择
191                    if index > 0 {
192                        let models_list: Vec<&str> = match brand_selection.as_str() {
193                            "Apple" => vec!["", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
194                            "Samsung" => vec!["", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
195                            "Huawei" => vec!["", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
196                            "Xiaomi" => vec!["", "14 Ultra", "14 Pro", "14", "13T Pro"],
197                            "OPPO" => vec!["", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
198                            "Vivo" => vec!["", "X100 Pro", "X100", "S18 Pro", "S18"],
199                            _ => vec![""],
200                        };
201                        
202                        if index < models_list.len() {
203                            let model = models_list[index];
204                            model_selection = model.to_string();
205                            println!("📱 型号: {}", model);
206                        }
207                    } else {
208                        model_selection.clear();
209                    }
210                } else if view_id == storage_spinner.id() {
211                    // 容量选择
212                    if index > 0 && index < storages.len() {
213                        let storage = storages[index];
214                        storage_selection = storage.to_string();
215                        println!("💾 容量: {}", storage);
216                    } else {
217                        storage_selection.clear();
218                    }
219                } else if view_id == color_spinner.id() {
220                    // 颜色选择
221                    if index > 0 && index < colors.len() {
222                        let color = colors[index];
223                        color_selection = color.to_string();
224                        println!("🎨 颜色: {}", color);
225                    } else {
226                        color_selection.clear();
227                    }
228                }
229                
230                // 更新结果显示
231                update_result(&mut activity, &result,
232                             &brand_selection, &model_selection, 
233                             &storage_selection, &color_selection)?;
234            },
235            "click" => {
236                let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
237                
238                if clicked_id == submit_btn.id() {
239                    let all_selected = !brand_selection.is_empty() 
240                                     && !model_selection.is_empty()
241                                     && !storage_selection.is_empty() 
242                                     && !color_selection.is_empty();
243                    
244                    if all_selected {
245                        let order_info = format!(
246                            "🎉 订购成功!\n\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}\n\n感谢您的订购!",
247                            brand_selection, model_selection, storage_selection, color_selection
248                        );
249                        
250                        println!("\n{}", order_info);
251                        
252                        result.set_text(&mut activity, &order_info)?;
253                        result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
254                    } else {
255                        println!("⚠️  请完成所有选择!");
256                    }
257                }
258            },
259            _ => {}
260        }
261    }
262}
Source

pub fn view(&self) -> &View

Get the underlying View

Examples found in repository?
examples/spinner_demo_v2.rs (line 37)
8fn main() -> Result<()> {
9    println!("=== Spinner 下拉列表演示 (新库版本) ===\n");
10    
11    // 创建 Activity(全屏模式)
12    let mut activity = Activity::new(false)?;
13    println!("✓ 连接建立\n");
14    
15    // 创建 NestedScrollView 作为根布局(支持滚动)
16    let scroll = activity.create_nested_scroll_view(None)?;
17    
18    // 创建主布局(放在 ScrollView 内)
19    let layout = activity.create_linear_layout(Some(scroll.id()))?;
20    layout.view().set_margin(&mut activity, 20)?;
21    
22    // 标题
23    let title = activity.create_text_view("📱 手机订购向导", Some(layout.id()))?;
24    title.set_text_size(&mut activity, 24)?;
25    title.view().set_height_wrap_content(&mut activity)?;
26    title.view().set_linear_layout_params(&mut activity, 0, None)?;
27    
28    // ========== 品牌选择 ==========
29    let brand_label = activity.create_text_view("选择品牌:", Some(layout.id()))?;
30    brand_label.set_text_size(&mut activity, 18)?;
31    brand_label.view().set_margin(&mut activity, 10)?;
32    brand_label.view().set_height_wrap_content(&mut activity)?;
33    brand_label.view().set_linear_layout_params(&mut activity, 0, None)?;
34    
35    let brands = vec!["请选择", "Apple", "Samsung", "Huawei", "Xiaomi", "OPPO", "Vivo"];
36    let brand_spinner = activity.create_spinner(Some(layout.id()))?;
37    brand_spinner.view().set_width_match_parent(&mut activity)?;
38    brand_spinner.view().set_height_wrap_content(&mut activity)?;
39    brand_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
40    brand_spinner.set_list(&mut activity, &brands)?;
41    brand_spinner.refresh(&mut activity)?;
42    
43    // ========== 型号选择 ==========
44    let model_label = activity.create_text_view("选择型号:", Some(layout.id()))?;
45    model_label.set_text_size(&mut activity, 18)?;
46    model_label.view().set_margin(&mut activity, 10)?;
47    model_label.view().set_height_wrap_content(&mut activity)?;
48    model_label.view().set_linear_layout_params(&mut activity, 0, None)?;
49    
50    let model_spinner = activity.create_spinner(Some(layout.id()))?;
51    model_spinner.view().set_width_match_parent(&mut activity)?;
52    model_spinner.view().set_height_wrap_content(&mut activity)?;
53    model_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
54    model_spinner.set_list(&mut activity, &["请先选择品牌"])?;
55    model_spinner.refresh(&mut activity)?;
56    
57    // ========== 容量选择 ==========
58    let storage_label = activity.create_text_view("选择容量:", Some(layout.id()))?;
59    storage_label.set_text_size(&mut activity, 18)?;
60    storage_label.view().set_margin(&mut activity, 10)?;
61    storage_label.view().set_height_wrap_content(&mut activity)?;
62    storage_label.view().set_linear_layout_params(&mut activity, 0, None)?;
63    
64    let storages = vec!["请选择", "64GB", "128GB", "256GB", "512GB", "1TB"];
65    let storage_spinner = activity.create_spinner(Some(layout.id()))?;
66    storage_spinner.view().set_width_match_parent(&mut activity)?;
67    storage_spinner.view().set_height_wrap_content(&mut activity)?;
68    storage_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
69    storage_spinner.set_list(&mut activity, &storages)?;
70    storage_spinner.refresh(&mut activity)?;
71    
72    // ========== 颜色选择 ==========
73    let color_label = activity.create_text_view("选择颜色:", Some(layout.id()))?;
74    color_label.set_text_size(&mut activity, 18)?;
75    color_label.view().set_margin(&mut activity, 10)?;
76    color_label.view().set_height_wrap_content(&mut activity)?;
77    color_label.view().set_linear_layout_params(&mut activity, 0, None)?;
78    
79    let colors = vec!["请选择", "黑色", "白色", "金色", "银色", "蓝色", "紫色", "绿色"];
80    let color_spinner = activity.create_spinner(Some(layout.id()))?;
81    color_spinner.view().set_width_match_parent(&mut activity)?;
82    color_spinner.view().set_height_wrap_content(&mut activity)?;
83    color_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
84    color_spinner.set_list(&mut activity, &colors)?;
85    color_spinner.refresh(&mut activity)?;
86    
87    // ========== 结果显示 ==========
88    let result = activity.create_text_view("请完成选择", Some(layout.id()))?;
89    result.set_text_size(&mut activity, 16)?;
90    result.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
91    result.view().set_margin(&mut activity, 10)?;
92    result.view().set_height_wrap_content(&mut activity)?;
93    result.view().set_linear_layout_params(&mut activity, 0, None)?;
94    
95    // ========== 提交按钮 ==========
96    let submit_btn = activity.create_button("🛒 确认订购", Some(layout.id()))?;
97    submit_btn.view().set_margin(&mut activity, 10)?;
98    submit_btn.view().set_height_wrap_content(&mut activity)?;
99    submit_btn.view().set_linear_layout_params(&mut activity, 0, None)?;
100    
101    println!("✓ 界面创建完成\n");
102    println!("━━━━━━━━━━━━━━━━━━━━━━");
103    println!("提示: 从下拉列表中选择");
104    println!("━━━━━━━━━━━━━━━━━━━━━━\n");
105    
106    // 选择状态
107    let mut brand_selection = String::new();
108    let mut model_selection = String::new();
109    let mut storage_selection = String::new();
110    let mut color_selection = String::new();
111    
112    // 更新结果显示的辅助函数
113    let update_result = |activity: &mut Activity, 
114                         result: &TextView,
115                         brand: &str, 
116                         model: &str, 
117                         storage: &str, 
118                         color: &str| -> Result<()> {
119        let all_selected = !brand.is_empty() && !model.is_empty() 
120                          && !storage.is_empty() && !color.is_empty();
121        
122        let result_text = if all_selected {
123            format!("✅ 已选择:\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}",
124                    brand, model, storage, color)
125        } else {
126            let mut missing = Vec::new();
127            if brand.is_empty() { missing.push("品牌"); }
128            if model.is_empty() { missing.push("型号"); }
129            if storage.is_empty() { missing.push("容量"); }
130            if color.is_empty() { missing.push("颜色"); }
131            format!("⚠️ 待选择: {}", missing.join(", "))
132        };
133        
134        result.set_text(activity, &result_text)?;
135        
136        let text_color = if all_selected { 
137            0xFF4CAF50u32 as i32  // 绿色
138        } else { 
139            0xFF666666u32 as i32  // 灰色
140        };
141        result.set_text_color(activity, text_color)?;
142        
143        Ok(())
144    };
145    
146    // 事件循环
147    loop {
148        let event = read_message(activity.event_stream())?;
149        let event_type = event["type"].as_str().unwrap_or("");
150        let event_value = &event["value"];
151        
152        match event_type {
153            "destroy" => {
154                // Activity 已被系统销毁,直接退出即可
155                println!("\n✓ Activity 已关闭");
156                return Ok(());
157            },
158            "itemselected" => {
159                let view_id = event_value["id"].as_i64().unwrap_or(-1);
160                let index = event_value["index"].as_i64().unwrap_or(0) as usize;
161                
162                if view_id == brand_spinner.id() {
163                    // 品牌选择
164                    if index > 0 && index < brands.len() {
165                        let brand = brands[index];
166                        brand_selection = brand.to_string();
167                        println!("📱 品牌: {}", brand);
168                        
169                        // 根据品牌更新型号列表
170                        let models: Vec<&str> = match brand {
171                            "Apple" => vec!["请选择", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
172                            "Samsung" => vec!["请选择", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
173                            "Huawei" => vec!["请选择", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
174                            "Xiaomi" => vec!["请选择", "14 Ultra", "14 Pro", "14", "13T Pro"],
175                            "OPPO" => vec!["请选择", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
176                            "Vivo" => vec!["请选择", "X100 Pro", "X100", "S18 Pro", "S18"],
177                            _ => vec!["请选择"],
178                        };
179                        
180                        // 更新型号 Spinner
181                        model_spinner.set_list(&mut activity, &models)?;
182                        model_spinner.refresh(&mut activity)?;
183                        
184                        // 重置型号选择
185                        model_selection.clear();
186                    } else {
187                        brand_selection.clear();
188                    }
189                } else if view_id == model_spinner.id() {
190                    // 型号选择
191                    if index > 0 {
192                        let models_list: Vec<&str> = match brand_selection.as_str() {
193                            "Apple" => vec!["", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
194                            "Samsung" => vec!["", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
195                            "Huawei" => vec!["", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
196                            "Xiaomi" => vec!["", "14 Ultra", "14 Pro", "14", "13T Pro"],
197                            "OPPO" => vec!["", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
198                            "Vivo" => vec!["", "X100 Pro", "X100", "S18 Pro", "S18"],
199                            _ => vec![""],
200                        };
201                        
202                        if index < models_list.len() {
203                            let model = models_list[index];
204                            model_selection = model.to_string();
205                            println!("📱 型号: {}", model);
206                        }
207                    } else {
208                        model_selection.clear();
209                    }
210                } else if view_id == storage_spinner.id() {
211                    // 容量选择
212                    if index > 0 && index < storages.len() {
213                        let storage = storages[index];
214                        storage_selection = storage.to_string();
215                        println!("💾 容量: {}", storage);
216                    } else {
217                        storage_selection.clear();
218                    }
219                } else if view_id == color_spinner.id() {
220                    // 颜色选择
221                    if index > 0 && index < colors.len() {
222                        let color = colors[index];
223                        color_selection = color.to_string();
224                        println!("🎨 颜色: {}", color);
225                    } else {
226                        color_selection.clear();
227                    }
228                }
229                
230                // 更新结果显示
231                update_result(&mut activity, &result,
232                             &brand_selection, &model_selection, 
233                             &storage_selection, &color_selection)?;
234            },
235            "click" => {
236                let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
237                
238                if clicked_id == submit_btn.id() {
239                    let all_selected = !brand_selection.is_empty() 
240                                     && !model_selection.is_empty()
241                                     && !storage_selection.is_empty() 
242                                     && !color_selection.is_empty();
243                    
244                    if all_selected {
245                        let order_info = format!(
246                            "🎉 订购成功!\n\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}\n\n感谢您的订购!",
247                            brand_selection, model_selection, storage_selection, color_selection
248                        );
249                        
250                        println!("\n{}", order_info);
251                        
252                        result.set_text(&mut activity, &order_info)?;
253                        result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
254                    } else {
255                        println!("⚠️  请完成所有选择!");
256                    }
257                }
258            },
259            _ => {}
260        }
261    }
262}
Source

pub fn set_list(&self, activity: &mut Activity, items: &[&str]) -> Result<()>

Set the list of options

Examples found in repository?
examples/spinner_demo_v2.rs (line 40)
8fn main() -> Result<()> {
9    println!("=== Spinner 下拉列表演示 (新库版本) ===\n");
10    
11    // 创建 Activity(全屏模式)
12    let mut activity = Activity::new(false)?;
13    println!("✓ 连接建立\n");
14    
15    // 创建 NestedScrollView 作为根布局(支持滚动)
16    let scroll = activity.create_nested_scroll_view(None)?;
17    
18    // 创建主布局(放在 ScrollView 内)
19    let layout = activity.create_linear_layout(Some(scroll.id()))?;
20    layout.view().set_margin(&mut activity, 20)?;
21    
22    // 标题
23    let title = activity.create_text_view("📱 手机订购向导", Some(layout.id()))?;
24    title.set_text_size(&mut activity, 24)?;
25    title.view().set_height_wrap_content(&mut activity)?;
26    title.view().set_linear_layout_params(&mut activity, 0, None)?;
27    
28    // ========== 品牌选择 ==========
29    let brand_label = activity.create_text_view("选择品牌:", Some(layout.id()))?;
30    brand_label.set_text_size(&mut activity, 18)?;
31    brand_label.view().set_margin(&mut activity, 10)?;
32    brand_label.view().set_height_wrap_content(&mut activity)?;
33    brand_label.view().set_linear_layout_params(&mut activity, 0, None)?;
34    
35    let brands = vec!["请选择", "Apple", "Samsung", "Huawei", "Xiaomi", "OPPO", "Vivo"];
36    let brand_spinner = activity.create_spinner(Some(layout.id()))?;
37    brand_spinner.view().set_width_match_parent(&mut activity)?;
38    brand_spinner.view().set_height_wrap_content(&mut activity)?;
39    brand_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
40    brand_spinner.set_list(&mut activity, &brands)?;
41    brand_spinner.refresh(&mut activity)?;
42    
43    // ========== 型号选择 ==========
44    let model_label = activity.create_text_view("选择型号:", Some(layout.id()))?;
45    model_label.set_text_size(&mut activity, 18)?;
46    model_label.view().set_margin(&mut activity, 10)?;
47    model_label.view().set_height_wrap_content(&mut activity)?;
48    model_label.view().set_linear_layout_params(&mut activity, 0, None)?;
49    
50    let model_spinner = activity.create_spinner(Some(layout.id()))?;
51    model_spinner.view().set_width_match_parent(&mut activity)?;
52    model_spinner.view().set_height_wrap_content(&mut activity)?;
53    model_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
54    model_spinner.set_list(&mut activity, &["请先选择品牌"])?;
55    model_spinner.refresh(&mut activity)?;
56    
57    // ========== 容量选择 ==========
58    let storage_label = activity.create_text_view("选择容量:", Some(layout.id()))?;
59    storage_label.set_text_size(&mut activity, 18)?;
60    storage_label.view().set_margin(&mut activity, 10)?;
61    storage_label.view().set_height_wrap_content(&mut activity)?;
62    storage_label.view().set_linear_layout_params(&mut activity, 0, None)?;
63    
64    let storages = vec!["请选择", "64GB", "128GB", "256GB", "512GB", "1TB"];
65    let storage_spinner = activity.create_spinner(Some(layout.id()))?;
66    storage_spinner.view().set_width_match_parent(&mut activity)?;
67    storage_spinner.view().set_height_wrap_content(&mut activity)?;
68    storage_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
69    storage_spinner.set_list(&mut activity, &storages)?;
70    storage_spinner.refresh(&mut activity)?;
71    
72    // ========== 颜色选择 ==========
73    let color_label = activity.create_text_view("选择颜色:", Some(layout.id()))?;
74    color_label.set_text_size(&mut activity, 18)?;
75    color_label.view().set_margin(&mut activity, 10)?;
76    color_label.view().set_height_wrap_content(&mut activity)?;
77    color_label.view().set_linear_layout_params(&mut activity, 0, None)?;
78    
79    let colors = vec!["请选择", "黑色", "白色", "金色", "银色", "蓝色", "紫色", "绿色"];
80    let color_spinner = activity.create_spinner(Some(layout.id()))?;
81    color_spinner.view().set_width_match_parent(&mut activity)?;
82    color_spinner.view().set_height_wrap_content(&mut activity)?;
83    color_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
84    color_spinner.set_list(&mut activity, &colors)?;
85    color_spinner.refresh(&mut activity)?;
86    
87    // ========== 结果显示 ==========
88    let result = activity.create_text_view("请完成选择", Some(layout.id()))?;
89    result.set_text_size(&mut activity, 16)?;
90    result.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
91    result.view().set_margin(&mut activity, 10)?;
92    result.view().set_height_wrap_content(&mut activity)?;
93    result.view().set_linear_layout_params(&mut activity, 0, None)?;
94    
95    // ========== 提交按钮 ==========
96    let submit_btn = activity.create_button("🛒 确认订购", Some(layout.id()))?;
97    submit_btn.view().set_margin(&mut activity, 10)?;
98    submit_btn.view().set_height_wrap_content(&mut activity)?;
99    submit_btn.view().set_linear_layout_params(&mut activity, 0, None)?;
100    
101    println!("✓ 界面创建完成\n");
102    println!("━━━━━━━━━━━━━━━━━━━━━━");
103    println!("提示: 从下拉列表中选择");
104    println!("━━━━━━━━━━━━━━━━━━━━━━\n");
105    
106    // 选择状态
107    let mut brand_selection = String::new();
108    let mut model_selection = String::new();
109    let mut storage_selection = String::new();
110    let mut color_selection = String::new();
111    
112    // 更新结果显示的辅助函数
113    let update_result = |activity: &mut Activity, 
114                         result: &TextView,
115                         brand: &str, 
116                         model: &str, 
117                         storage: &str, 
118                         color: &str| -> Result<()> {
119        let all_selected = !brand.is_empty() && !model.is_empty() 
120                          && !storage.is_empty() && !color.is_empty();
121        
122        let result_text = if all_selected {
123            format!("✅ 已选择:\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}",
124                    brand, model, storage, color)
125        } else {
126            let mut missing = Vec::new();
127            if brand.is_empty() { missing.push("品牌"); }
128            if model.is_empty() { missing.push("型号"); }
129            if storage.is_empty() { missing.push("容量"); }
130            if color.is_empty() { missing.push("颜色"); }
131            format!("⚠️ 待选择: {}", missing.join(", "))
132        };
133        
134        result.set_text(activity, &result_text)?;
135        
136        let text_color = if all_selected { 
137            0xFF4CAF50u32 as i32  // 绿色
138        } else { 
139            0xFF666666u32 as i32  // 灰色
140        };
141        result.set_text_color(activity, text_color)?;
142        
143        Ok(())
144    };
145    
146    // 事件循环
147    loop {
148        let event = read_message(activity.event_stream())?;
149        let event_type = event["type"].as_str().unwrap_or("");
150        let event_value = &event["value"];
151        
152        match event_type {
153            "destroy" => {
154                // Activity 已被系统销毁,直接退出即可
155                println!("\n✓ Activity 已关闭");
156                return Ok(());
157            },
158            "itemselected" => {
159                let view_id = event_value["id"].as_i64().unwrap_or(-1);
160                let index = event_value["index"].as_i64().unwrap_or(0) as usize;
161                
162                if view_id == brand_spinner.id() {
163                    // 品牌选择
164                    if index > 0 && index < brands.len() {
165                        let brand = brands[index];
166                        brand_selection = brand.to_string();
167                        println!("📱 品牌: {}", brand);
168                        
169                        // 根据品牌更新型号列表
170                        let models: Vec<&str> = match brand {
171                            "Apple" => vec!["请选择", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
172                            "Samsung" => vec!["请选择", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
173                            "Huawei" => vec!["请选择", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
174                            "Xiaomi" => vec!["请选择", "14 Ultra", "14 Pro", "14", "13T Pro"],
175                            "OPPO" => vec!["请选择", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
176                            "Vivo" => vec!["请选择", "X100 Pro", "X100", "S18 Pro", "S18"],
177                            _ => vec!["请选择"],
178                        };
179                        
180                        // 更新型号 Spinner
181                        model_spinner.set_list(&mut activity, &models)?;
182                        model_spinner.refresh(&mut activity)?;
183                        
184                        // 重置型号选择
185                        model_selection.clear();
186                    } else {
187                        brand_selection.clear();
188                    }
189                } else if view_id == model_spinner.id() {
190                    // 型号选择
191                    if index > 0 {
192                        let models_list: Vec<&str> = match brand_selection.as_str() {
193                            "Apple" => vec!["", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
194                            "Samsung" => vec!["", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
195                            "Huawei" => vec!["", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
196                            "Xiaomi" => vec!["", "14 Ultra", "14 Pro", "14", "13T Pro"],
197                            "OPPO" => vec!["", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
198                            "Vivo" => vec!["", "X100 Pro", "X100", "S18 Pro", "S18"],
199                            _ => vec![""],
200                        };
201                        
202                        if index < models_list.len() {
203                            let model = models_list[index];
204                            model_selection = model.to_string();
205                            println!("📱 型号: {}", model);
206                        }
207                    } else {
208                        model_selection.clear();
209                    }
210                } else if view_id == storage_spinner.id() {
211                    // 容量选择
212                    if index > 0 && index < storages.len() {
213                        let storage = storages[index];
214                        storage_selection = storage.to_string();
215                        println!("💾 容量: {}", storage);
216                    } else {
217                        storage_selection.clear();
218                    }
219                } else if view_id == color_spinner.id() {
220                    // 颜色选择
221                    if index > 0 && index < colors.len() {
222                        let color = colors[index];
223                        color_selection = color.to_string();
224                        println!("🎨 颜色: {}", color);
225                    } else {
226                        color_selection.clear();
227                    }
228                }
229                
230                // 更新结果显示
231                update_result(&mut activity, &result,
232                             &brand_selection, &model_selection, 
233                             &storage_selection, &color_selection)?;
234            },
235            "click" => {
236                let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
237                
238                if clicked_id == submit_btn.id() {
239                    let all_selected = !brand_selection.is_empty() 
240                                     && !model_selection.is_empty()
241                                     && !storage_selection.is_empty() 
242                                     && !color_selection.is_empty();
243                    
244                    if all_selected {
245                        let order_info = format!(
246                            "🎉 订购成功!\n\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}\n\n感谢您的订购!",
247                            brand_selection, model_selection, storage_selection, color_selection
248                        );
249                        
250                        println!("\n{}", order_info);
251                        
252                        result.set_text(&mut activity, &order_info)?;
253                        result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
254                    } else {
255                        println!("⚠️  请完成所有选择!");
256                    }
257                }
258            },
259            _ => {}
260        }
261    }
262}
Source

pub fn refresh(&self, activity: &mut Activity) -> Result<()>

Refresh the spinner (needed after setList to ensure display is updated)

Examples found in repository?
examples/spinner_demo_v2.rs (line 41)
8fn main() -> Result<()> {
9    println!("=== Spinner 下拉列表演示 (新库版本) ===\n");
10    
11    // 创建 Activity(全屏模式)
12    let mut activity = Activity::new(false)?;
13    println!("✓ 连接建立\n");
14    
15    // 创建 NestedScrollView 作为根布局(支持滚动)
16    let scroll = activity.create_nested_scroll_view(None)?;
17    
18    // 创建主布局(放在 ScrollView 内)
19    let layout = activity.create_linear_layout(Some(scroll.id()))?;
20    layout.view().set_margin(&mut activity, 20)?;
21    
22    // 标题
23    let title = activity.create_text_view("📱 手机订购向导", Some(layout.id()))?;
24    title.set_text_size(&mut activity, 24)?;
25    title.view().set_height_wrap_content(&mut activity)?;
26    title.view().set_linear_layout_params(&mut activity, 0, None)?;
27    
28    // ========== 品牌选择 ==========
29    let brand_label = activity.create_text_view("选择品牌:", Some(layout.id()))?;
30    brand_label.set_text_size(&mut activity, 18)?;
31    brand_label.view().set_margin(&mut activity, 10)?;
32    brand_label.view().set_height_wrap_content(&mut activity)?;
33    brand_label.view().set_linear_layout_params(&mut activity, 0, None)?;
34    
35    let brands = vec!["请选择", "Apple", "Samsung", "Huawei", "Xiaomi", "OPPO", "Vivo"];
36    let brand_spinner = activity.create_spinner(Some(layout.id()))?;
37    brand_spinner.view().set_width_match_parent(&mut activity)?;
38    brand_spinner.view().set_height_wrap_content(&mut activity)?;
39    brand_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
40    brand_spinner.set_list(&mut activity, &brands)?;
41    brand_spinner.refresh(&mut activity)?;
42    
43    // ========== 型号选择 ==========
44    let model_label = activity.create_text_view("选择型号:", Some(layout.id()))?;
45    model_label.set_text_size(&mut activity, 18)?;
46    model_label.view().set_margin(&mut activity, 10)?;
47    model_label.view().set_height_wrap_content(&mut activity)?;
48    model_label.view().set_linear_layout_params(&mut activity, 0, None)?;
49    
50    let model_spinner = activity.create_spinner(Some(layout.id()))?;
51    model_spinner.view().set_width_match_parent(&mut activity)?;
52    model_spinner.view().set_height_wrap_content(&mut activity)?;
53    model_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
54    model_spinner.set_list(&mut activity, &["请先选择品牌"])?;
55    model_spinner.refresh(&mut activity)?;
56    
57    // ========== 容量选择 ==========
58    let storage_label = activity.create_text_view("选择容量:", Some(layout.id()))?;
59    storage_label.set_text_size(&mut activity, 18)?;
60    storage_label.view().set_margin(&mut activity, 10)?;
61    storage_label.view().set_height_wrap_content(&mut activity)?;
62    storage_label.view().set_linear_layout_params(&mut activity, 0, None)?;
63    
64    let storages = vec!["请选择", "64GB", "128GB", "256GB", "512GB", "1TB"];
65    let storage_spinner = activity.create_spinner(Some(layout.id()))?;
66    storage_spinner.view().set_width_match_parent(&mut activity)?;
67    storage_spinner.view().set_height_wrap_content(&mut activity)?;
68    storage_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
69    storage_spinner.set_list(&mut activity, &storages)?;
70    storage_spinner.refresh(&mut activity)?;
71    
72    // ========== 颜色选择 ==========
73    let color_label = activity.create_text_view("选择颜色:", Some(layout.id()))?;
74    color_label.set_text_size(&mut activity, 18)?;
75    color_label.view().set_margin(&mut activity, 10)?;
76    color_label.view().set_height_wrap_content(&mut activity)?;
77    color_label.view().set_linear_layout_params(&mut activity, 0, None)?;
78    
79    let colors = vec!["请选择", "黑色", "白色", "金色", "银色", "蓝色", "紫色", "绿色"];
80    let color_spinner = activity.create_spinner(Some(layout.id()))?;
81    color_spinner.view().set_width_match_parent(&mut activity)?;
82    color_spinner.view().set_height_wrap_content(&mut activity)?;
83    color_spinner.view().set_linear_layout_params(&mut activity, 0, None)?;
84    color_spinner.set_list(&mut activity, &colors)?;
85    color_spinner.refresh(&mut activity)?;
86    
87    // ========== 结果显示 ==========
88    let result = activity.create_text_view("请完成选择", Some(layout.id()))?;
89    result.set_text_size(&mut activity, 16)?;
90    result.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
91    result.view().set_margin(&mut activity, 10)?;
92    result.view().set_height_wrap_content(&mut activity)?;
93    result.view().set_linear_layout_params(&mut activity, 0, None)?;
94    
95    // ========== 提交按钮 ==========
96    let submit_btn = activity.create_button("🛒 确认订购", Some(layout.id()))?;
97    submit_btn.view().set_margin(&mut activity, 10)?;
98    submit_btn.view().set_height_wrap_content(&mut activity)?;
99    submit_btn.view().set_linear_layout_params(&mut activity, 0, None)?;
100    
101    println!("✓ 界面创建完成\n");
102    println!("━━━━━━━━━━━━━━━━━━━━━━");
103    println!("提示: 从下拉列表中选择");
104    println!("━━━━━━━━━━━━━━━━━━━━━━\n");
105    
106    // 选择状态
107    let mut brand_selection = String::new();
108    let mut model_selection = String::new();
109    let mut storage_selection = String::new();
110    let mut color_selection = String::new();
111    
112    // 更新结果显示的辅助函数
113    let update_result = |activity: &mut Activity, 
114                         result: &TextView,
115                         brand: &str, 
116                         model: &str, 
117                         storage: &str, 
118                         color: &str| -> Result<()> {
119        let all_selected = !brand.is_empty() && !model.is_empty() 
120                          && !storage.is_empty() && !color.is_empty();
121        
122        let result_text = if all_selected {
123            format!("✅ 已选择:\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}",
124                    brand, model, storage, color)
125        } else {
126            let mut missing = Vec::new();
127            if brand.is_empty() { missing.push("品牌"); }
128            if model.is_empty() { missing.push("型号"); }
129            if storage.is_empty() { missing.push("容量"); }
130            if color.is_empty() { missing.push("颜色"); }
131            format!("⚠️ 待选择: {}", missing.join(", "))
132        };
133        
134        result.set_text(activity, &result_text)?;
135        
136        let text_color = if all_selected { 
137            0xFF4CAF50u32 as i32  // 绿色
138        } else { 
139            0xFF666666u32 as i32  // 灰色
140        };
141        result.set_text_color(activity, text_color)?;
142        
143        Ok(())
144    };
145    
146    // 事件循环
147    loop {
148        let event = read_message(activity.event_stream())?;
149        let event_type = event["type"].as_str().unwrap_or("");
150        let event_value = &event["value"];
151        
152        match event_type {
153            "destroy" => {
154                // Activity 已被系统销毁,直接退出即可
155                println!("\n✓ Activity 已关闭");
156                return Ok(());
157            },
158            "itemselected" => {
159                let view_id = event_value["id"].as_i64().unwrap_or(-1);
160                let index = event_value["index"].as_i64().unwrap_or(0) as usize;
161                
162                if view_id == brand_spinner.id() {
163                    // 品牌选择
164                    if index > 0 && index < brands.len() {
165                        let brand = brands[index];
166                        brand_selection = brand.to_string();
167                        println!("📱 品牌: {}", brand);
168                        
169                        // 根据品牌更新型号列表
170                        let models: Vec<&str> = match brand {
171                            "Apple" => vec!["请选择", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
172                            "Samsung" => vec!["请选择", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
173                            "Huawei" => vec!["请选择", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
174                            "Xiaomi" => vec!["请选择", "14 Ultra", "14 Pro", "14", "13T Pro"],
175                            "OPPO" => vec!["请选择", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
176                            "Vivo" => vec!["请选择", "X100 Pro", "X100", "S18 Pro", "S18"],
177                            _ => vec!["请选择"],
178                        };
179                        
180                        // 更新型号 Spinner
181                        model_spinner.set_list(&mut activity, &models)?;
182                        model_spinner.refresh(&mut activity)?;
183                        
184                        // 重置型号选择
185                        model_selection.clear();
186                    } else {
187                        brand_selection.clear();
188                    }
189                } else if view_id == model_spinner.id() {
190                    // 型号选择
191                    if index > 0 {
192                        let models_list: Vec<&str> = match brand_selection.as_str() {
193                            "Apple" => vec!["", "iPhone 15 Pro Max", "iPhone 15 Pro", "iPhone 15", "iPhone 14"],
194                            "Samsung" => vec!["", "Galaxy S24 Ultra", "Galaxy S24+", "Galaxy S24", "Galaxy Z Fold5"],
195                            "Huawei" => vec!["", "Mate 60 Pro", "Mate 60", "P60 Pro", "P60"],
196                            "Xiaomi" => vec!["", "14 Ultra", "14 Pro", "14", "13T Pro"],
197                            "OPPO" => vec!["", "Find X7 Ultra", "Find X7", "Reno 11 Pro", "Reno 11"],
198                            "Vivo" => vec!["", "X100 Pro", "X100", "S18 Pro", "S18"],
199                            _ => vec![""],
200                        };
201                        
202                        if index < models_list.len() {
203                            let model = models_list[index];
204                            model_selection = model.to_string();
205                            println!("📱 型号: {}", model);
206                        }
207                    } else {
208                        model_selection.clear();
209                    }
210                } else if view_id == storage_spinner.id() {
211                    // 容量选择
212                    if index > 0 && index < storages.len() {
213                        let storage = storages[index];
214                        storage_selection = storage.to_string();
215                        println!("💾 容量: {}", storage);
216                    } else {
217                        storage_selection.clear();
218                    }
219                } else if view_id == color_spinner.id() {
220                    // 颜色选择
221                    if index > 0 && index < colors.len() {
222                        let color = colors[index];
223                        color_selection = color.to_string();
224                        println!("🎨 颜色: {}", color);
225                    } else {
226                        color_selection.clear();
227                    }
228                }
229                
230                // 更新结果显示
231                update_result(&mut activity, &result,
232                             &brand_selection, &model_selection, 
233                             &storage_selection, &color_selection)?;
234            },
235            "click" => {
236                let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
237                
238                if clicked_id == submit_btn.id() {
239                    let all_selected = !brand_selection.is_empty() 
240                                     && !model_selection.is_empty()
241                                     && !storage_selection.is_empty() 
242                                     && !color_selection.is_empty();
243                    
244                    if all_selected {
245                        let order_info = format!(
246                            "🎉 订购成功!\n\n品牌: {}\n型号: {}\n容量: {}\n颜色: {}\n\n感谢您的订购!",
247                            brand_selection, model_selection, storage_selection, color_selection
248                        );
249                        
250                        println!("\n{}", order_info);
251                        
252                        result.set_text(&mut activity, &order_info)?;
253                        result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
254                    } else {
255                        println!("⚠️  请完成所有选择!");
256                    }
257                }
258            },
259            _ => {}
260        }
261    }
262}

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V