Blackberry: что не так с моей реализацией ListField? - PullRequest
0 голосов
/ 20 июля 2011

Это мой код для моей реализации ListField. Создает список; однако он пуст, хотя я и думал, что добавлю друзей из vectorFriends. Я очень новичок в разработке приложений 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;
}

Ответы [ 3 ]

2 голосов
/ 21 июля 2011

Возможно, vectorFriends пусто?

Кроме того, ваш метод insert () добавляет объекты String к вектору, а метод drawListRow () осуществляет приведение к Friend. Они несовместимы.

1 голос
/ 21 июля 2011

Вы должны вызывать 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);
    }
}
0 голосов
/ 20 июля 2011

Похоже, вы еще не звонили setSize() в списке.

...