[英]Blackberry: What is wrong with my implementation of ListField?
这是我实现 ListField 的代码。 它创建一个列表; 但是,即使我认为我添加了来自vectorFriends
的 Friends,它也是空的。 我对开发 blackberry 应用程序非常陌生,所以我确信我的错误非常明显。 谁能告诉我为什么我的清单是空的?
public class HomeScreen extends MainScreen implements FieldChangeListener, ListFieldCallback{
private ListField listFriends;
private Vector vectorFriends;
private Friend _selectedPerson = null;
public HomeScreen(){
vectorFriends = User.getMyUser().getFriends();
this.add(new LabelField("Friends"));
listFriends = new ListField(vectorFriends.size());
listFriends.setCallback(this);
this.add(listFriends)
}
//implemented ListFieldCallback methods
//draw current row
public void drawListRow(ListField list, Graphics g, int index, int y, int w) {
Friend personToDraw = (Friend) this.get(list, index);
int drawColor = Color.BLACK;
g.setColor(drawColor);
g.drawText(personToDraw.getFullName(), 0, y, 0, w);
}
// get the selected index from the correct Vector
public Object get(ListField list, int index) {
return vectorFriends.elementAt(index);
}
public void insert(String toInsert, int index) {
vectorFriends.insertElementAt(toInsert, index);
}
public int getPreferredWidth(ListField list) {
return Display.getWidth();
}
public int indexOfList(ListField listField, String prefix, int start) {
// Not a correct implementation - this is really just commented out
return start;
}
public int getPreferredWidth(ListField list) {
return Display.getWidth();
}
public int indexOfList(ListField listField, String prefix, int start) {
// Not a correct implementation - this is really just commented out
return start;
}
vectorFriends 可能是空的吗?
此外,您的 insert() 方法正在将 String 对象添加到向量中,而 drawListRow() 方法正在转换为 Friend。 这些是不一致的。
每当 vectorFriends 发生变化时,您都应该调用ListField.setSize() :
朋友们。java:
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.decor.*;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.image.*;
import java.util.*;
public class Friends extends UiApplication {
public static void main(String[] args) {
Friends app = new Friends();
app.enterEventDispatcher();
}
public Friends () {
pushScreen(new HomeScreen());
}
}
class HomeScreen extends MainScreen implements FieldChangeListener, ListFieldCallback {
private ListField listFriends;
private Vector vectorFriends = new Vector();
public HomeScreen() {
vectorFriends.addElement("Alice");
vectorFriends.addElement("Bob");
vectorFriends.addElement("Carol");
vectorFriends.addElement("Dave");
vectorFriends.addElement("Eve");
setTitle(new LabelField("Friends"));
listFriends = new ListField(vectorFriends.size());
listFriends.setCallback(this);
listFriends.setEmptyString("You have no friends", 0);
add(listFriends);
ButtonField kill = new ButtonField("Kill");
kill.setChangeListener(this);
add(kill);
}
public void fieldChanged(Field field, int context) {
if (vectorFriends.size() > 0) {
vectorFriends.removeElementAt(0);
listFriends.setSize(vectorFriends.size()); // IMPORTANT
}
}
//implemented ListFieldCallback methods
//draw current row
public void drawListRow(ListField list, Graphics g, int index, int y, int w) {
String personToDraw = (String) this.get(list, index);
int drawColor = Color.RED;
g.setColor(drawColor);
g.drawText(personToDraw, 0, y, 0, w);
}
// get the selected index from the correct Vector
public Object get(ListField list, int index) {
return vectorFriends.elementAt(index);
}
public void insert(String toInsert, int index) {
vectorFriends.insertElementAt(toInsert, index);
}
public int getPreferredWidth(ListField list) {
return Display.getWidth();
}
public int indexOfList(ListField listField, String prefix, int start) {
return vectorFriends.indexOf(prefix, start);
}
}
看起来你还没有在列表中调用setSize()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.