列表List
根據上一節的概述我們已經大概了解了Lcdui 這個包,現在讓我們來介紹Screen 類這個類裡面的幾個重要的類,我們本屆家少的是Screen 的一個子類List, 它一共有三種具體的類型:implicit( 簡易式) ,exclusive( 單選式) ,multiple( 多選式) 。
與相關的List 元素相關的應用程序操作一般可以概括為ITEM 型命令或者SCREEN 類型命令,其作用域范圍的判斷依據是該操作是影響到被選擇原則元素還是整個List 來判定,List 對象上的操作包括insert, append 和delete, 用於約束List 具體類型的類是ChoiceGroup, List 中的元素可以用getString 、insert 、set 、append 、delete 、getImage 等方法具體操縱,對於項目的選擇我們則使用getSelectedIndex() 、setSelectedIndex() 、getSelectedFlags() 、setSelectedFlags() 和isSelected 來處理,下面我們來介紹一下第一段提到的三個List 類型。
Exclusive( 單選式)
和所有的List 一樣,我們可以在構造函數中指定他的標題和類型(構造函數類型1 ),也可以使用另一種構造函數類型,即直接傳入一個String 數組和一個Image 數組,這種構造函數可以直接對List 內容進行初始化(構造函數類型那個2 )。
在類型1 當中,我們需要對其增加內容的時候,就需要用到前面提到的append() 方法了,
該構造函數的第一個參數是屏幕上的文字,第二個則是代表選項的圖標,當不需要圖標的時候,和我們大多數的處理方法相同,只需傳入NULL 這個參數就行了,任何時候我們可以用insert() 方法來插入項目,用set() 方法來來重新設置一個項目,當我們不需要一個項目的時候,可以用delete() 方法來刪除特定的選項,我們只需往該方法內傳入索引值即可,需要注意的是我們的索引值是從0 開始,deleteAll() 這個方法則是一次性刪除所有的指定List 的內容。
我們在命令處理函數commandAction() 中,可以用上面提到的幾種方法來對用戶選擇的操作進行偵測,同時定義好對應的處理函數,來達到對應的處理效果。
Implicit( 隱含式)
IMPLICIT( 隱含式) 其實和上面的單選式沒什麼大的區別,唯一不同的地方在於命令的處理機制上有一些細微的區別:Choice.IMPLICIT 類型的List 會在用戶選擇之後立刻引發事件,並將List.SELECTCOMMAND 作為第一個參數傳入。
如果我們不希望該類型的 List 在按下後發出該命令作為commandAction () 的第一個參數傳入,我們可以用setSelectCommand(null) ,將它關掉,需要注意的是,這樣做的後果是使
commandAction() 接受到的第一個參數為null 。
Multiple( 多選式)
multiple( 多選式) 類型的List 顧名思義,可以進行多重選擇,其他的地方和上面兩種類型大同小異,可以進行多項的List 選擇。
下面給出了一個包含這三種形式的List的Demo代碼:
1. /*
2. * To change this template, choose Tools | Templates
3. * and open the template in the editor.
4. */
5. package com.thinkrace.list;
6. import java.io.IOException;
7. import javax.microedition.lcdui.Choice;
8. import javax.microedition.lcdui.Command;
9. import javax.microedition.lcdui.CommandListener;
10. import javax.microedition.lcdui.Display;
11. import javax.microedition.lcdui.Displayable;
12. import javax.microedition.lcdui.Image;
13. import javax.microedition.lcdui.List;
14. import javax.microedition.midlet.*;
15. /**
16. * @author pengjw
17. */
18. public class ListDemo extends MIDlet implements CommandListener{
19. private static final Command CMD_EXIT = new Command("Exit",Command.EXIT,1);
20. private static final Command CMD_BACK = new Command("Back",Command.BACK,1);
21. private Display display;
22. private List mainList;
23. private List exclusiveList;
24. private List implicitList;
25. private List mutipleList;
26. private boolean firstTime;
27. private Image[] imageArray;
28. public ListDemo(){
29. display = Display.getDisplay(this);
30. String[] stringArray = {
31. "Option A",
32. "Option B",
33. "Option C",
34. "Option D"
35. };
36. imageArray = null;
37. //ExlcusiveList 的聲明
38. exclusiveList = new List("Exclusive",Choice.EXCLUSIVE,stringArray,imageArray);
39. exclusiveList.addCommand(CMD_BACK);
40. exclusiveList.addCommand(CMD_EXIT);
41. exclusiveList.setCommandListener(this);
42. //ImplicitList 的聲明
43. implicitList = new List("Implicit",Choice.IMPLICIT,stringArray,imageArray);
44. implicitList.addCommand(CMD_BACK);
45. implicitList.addCommand(CMD_EXIT);
46. implicitList.setCommandListener(this);
47. //MutipleListde 的聲明
48. mutipleList = new List("Multiple",Choice.MULTIPLE,stringArray,imageArray);
49. mutipleList.addCommand(CMD_BACK);
50. mutipleList.addCommand(CMD_EXIT);
51. mutipleList.setCommandListener(this);
52. }
53. public void startApp() {
54. if(firstTime){
55. imageArray = null;
56. }
57. try {
58. //注意這裡的圖片路徑是相對的,圖片格式應該為png
59. Image icon = Image.createImage("/images/java.png");
60. imageArray = new Image[]{
61. icon,
62. icon,
63. icon
64. };
65. } catch (Exception e) {
66. e.printStackTrace();
67. }
68. String[] stringArray = {
69. "Exclusiver",
70. "Implicit",
71. "Multiple"
72. };
73. //mainList主菜單
74. mainList = new List("Choose Type",Choice.IMPLICIT,stringArray,imageArray);
75. mainList.addCommand(CMD_EXIT);
76. mainList.setCommandListener(this);
77. display.setCurrent(mainList);
78. firstTime = false;
79. }
80. public void pauseApp() {
81. }
82. public void destroyApp(boolean unconditional) {
83. }
84. //實現CommandListener接口的commandAction方法
85. public void commandAction(Command c, Displayable d) {
86. if(d.equals(mainList)){
87. if(c==List.SELECT_COMMAND){
88. if(d.equals(mainList)){
89. switch(((List)d).getSelectedIndex()){
90. case 0:
91. display.setCurrent(exclusiveList);
92. break;
93. case 1:
94. display.setCurrent(implicitList);
95. break;
96. case 2:
97. display.setCurrent(mutipleList);
98. break;
99. }
100. }
101. }
102. }else{
103. if(c==CMD_BACK){
104. display.setCurrent(mainList);
105. }
106. }
107. if(c==CMD_EXIT){
108. destroyApp(false);
109. notifyDestroyed();
110. }
111. }
112. }
113.