2011-07-20 26 views
0

这是我实现ListField的代码。它创建一个列表;然而,即使我认为我从vectorFriends添加了朋友,它仍然是空的。我对开发黑莓应用程序很陌生,所以我确信我的错误非常明显。谁能告诉我为什么我的清单是空的?Blackberry:我的ListField实现有什么问题?

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; 
} 

回答

2

是vectorFriends空的吧?

此外,您的插入件()方法被加入字符串对象到矢量,而drawListRow()方法被浇铸到朋友。这些不一致。

0

看起来你已经不叫setSize()名单上。

+0

当我创建'listFriends',我设置大小为'vectorFriends.size()' 。所以我不认为这是事实。 –

+0

啊我不好,错过了位... – jprofitt

1

你应该叫ListField.setSize()每当vectorFriends变化:

screenshot

Friends.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); 
    } 
}