Java 在BlackBerry上自定义listfield项
我有一个简单的列表字段类,当我选择一个特定的列表项时,它会显示默认菜单。我想自定义listfield项,这样当选择一个项时,一个新屏幕就会被推到堆栈上。我正在重写trackwheeel()方法,但无法使其工作Java 在BlackBerry上自定义listfield项,java,blackberry,Java,Blackberry,我有一个简单的列表字段类,当我选择一个特定的列表项时,它会显示默认菜单。我想自定义listfield项,这样当选择一个项时,一个新屏幕就会被推到堆栈上。我正在重写trackwheeel()方法,但无法使其工作 import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.contai
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import java.util.Vector;
public class TeamListScreen extends UiApplication
{
public static void main(String[] args)
{
TeamListScreen theApp = new TeamListScreen();
theApp.enterEventDispatcher();
}
public TeamListScreen()
{
pushScreen(new ListFieldScreen());
}
}
class ListFieldScreen extends MainScreen
{
private ListField _listField;
private Vector _listElements;
int listFieldIndex = -1;
public ListFieldScreen()
{
setTitle("List Field Sample");
_listElements = new Vector();
_listField = new ListField();
ListCallback _callback = new ListCallback();
_listField.setCallback(_callback);
_listField.setRowHeight(45);
//_listField.setChangeListener(this);
add(_listField);
initializeList();
_listField = new ListField(_listElements.size()) {
protected void drawFocus(Graphics graphics, boolean on) {
}
protected boolean trackwheelClick(int status, int time) {
listFieldIndex = _listField.getSelectedIndex();
if (listFieldIndex < 0) {
listFieldIndex = 0;
}
try {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
UiApplication.getUiApplication().pushScreen(new LiveScreen());
// UiApplication.getUiApplication().popScreen(getActiveScreen());
}
});
} catch (Exception e) {
}
return true;
}
};
}
private void initializeList()
{
String itemOne = "List item one";
String itemTwo = "List item two";
_listElements.addElement(itemOne);
_listElements.addElement(itemTwo);
reloadList();
}
private void reloadList()
{
_listField.setSize(_listElements.size());
}
private class ListCallback implements ListFieldCallback
{
public void drawListRow(ListField list, Graphics g, int index, int y, int w)
{
String text = (String)_listElements.elementAt(index);
g.drawText(text, 0, y, 0, w);
}
public Object get(ListField list, int index)
{
return _listElements.elementAt(index);
}
public int indexOfList(ListField list, String prefix, int string)
{
return _listElements.indexOf(prefix, string);
}
public int getPreferredWidth(ListField list)
{
return Display.getWidth();
}
}
}
导入net.rim.device.api.system.*;
导入net.rim.device.api.ui.*;
导入net.rim.device.api.ui.component.*;
导入net.rim.device.api.ui.container.*;
导入java.util.Vector;
公共类TeamListScreen扩展了UIC应用程序
{
公共静态void main(字符串[]args)
{
TeamListScreen theApp=新建TeamListScreen();
theApp.enterEventDispatcher();
}
公共团队列表屏幕()
{
推屏(新ListFieldScreen());
}
}
类ListFieldScreen扩展了MainScreen
{
私有列表字段_ListField;
私有向量列表元素;
int listFieldIndex=-1;
公共列表字段屏幕()
{
setTitle(“列表字段样本”);
_listElements=新向量();
_listField=新listField();
ListCallback _callback=新建ListCallback();
_setCallback(_callback);
_listField.setRowHeight(45);
//_setChangeListener(这个);
添加(_listField);
初始化列表();
_listField=新的listField(\u listElements.size()){
受保护的void drawFocus(图形,布尔打开){
}
受保护的布尔trackwheelClick(整数状态,整数时间){
listFieldIndex=\u listField.getSelectedIndex();
如果(listFieldIndex<0){
listFieldIndex=0;
}
试一试{
UiApplication.getUiApplication().invokeLater(新的Runnable()){
公开募捐{
UiApplication.getUiApplication().pushScreen(新的LiveScreen());
//UiApplication.getUiApplication().popScreen(getActiveScreen());
}
});
}捕获(例外e){
}
返回true;
}
};
}
私有无效初始值列表()
{
String itemOne=“列出项目一”;
String itemTwo=“列出第二项”;
_列表元素。附加元素(项目一);
_列表元素。附加元素(第二项);
重载列表();
}
私有void重载列表()
{
_setSize(_listElements.size());
}
私有类ListCallback实现ListFieldCallback
{
public void drawListRow(列表字段列表、图形g、整数索引、整数y、整数w)
{
String text=(String)\u liselements.elementAt(index);
g、 drawText(文本,0,y,0,w);
}
公共对象获取(列表字段列表,int索引)
{
return _listElements.elementAt(索引);
}
public int indexOfList(列表字段列表、字符串前缀、int字符串)
{
return _liselements.indexOf(前缀,字符串);
}
public int getPreferredWidth(列表字段列表)
{
返回Display.getWidth();
}
}
}
不推荐使用trackwheelClick()函数,应改用navigationClick()。
顺便说一句,您不需要使用UiApplication.getUiApplication().invokeLater,因为它已经在事件队列中运行