2011-07-20 16 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は空ですか?

また、insert()メソッドはStringオブジェクトをベクターに追加し、drawListRow()メソッドはFriendにキャストします。これらは矛盾しています。

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); 
    } 
} 
関連する問題