Blackberry: добавление флажков в списке - PullRequest
0 голосов
/ 11 октября 2011

Я успешно получил список контактов.Но я не могу добавить флажки с этим списком.Я сделал отдельную программу из флажка и его работы.но не со списком контактов.Кто-нибудь может сказать мне здесь, где я должен добавить флажки?Вот код:

public final class ContactsScreen extends MainScreen implements ListFieldCallback {
    private ListField listField;
    private ContactList blackBerryContactList;
    private Vector blackBerryContacts;

    public ContactsScreen(){
        CheckboxField checkBox1 = new CheckboxField();

        setTitle(new LabelField( "Contacts", LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH ));

        listField = new ListField();
        listField.setCallback(this);
        add(listField);
        add(new RichTextField("Size" +(listField)));
        reloadContactList();
    }

    private boolean reloadContactList() {
        try {
            blackBerryContactList = (ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY);
            Enumeration allContacts = blackBerryContactList.items();
            blackBerryContacts = enumToVector(allContacts);
            listField.setSize(blackBerryContacts.size());
            return true;
        }
        catch(PIMException e){
            return false;
        }
    }

    private Vector enumToVector(Enumeration contactEnum) {
        Vector v = new Vector();

        if (contactEnum == null)
            return v;

        while (contactEnum.hasMoreElements()) {
            v.addElement(contactEnum.nextElement());
        }
        return v;
    }

    public void drawListRow(ListField fieldVar, Graphics graphics, int index, int y, int width){
        if ( listField == fieldVar && index < blackBerryContacts.size())
        {
            add(new RichTextField(blackBerryContacts.size()));
            BlackBerryContact item = (BlackBerryContact)blackBerryContacts.elementAt(index);
            String displayName = getDisplayName(item);
            graphics.drawText(displayName, 0, y, 0, width);
        }
    }

    public Object get(ListField fieldVar, int index)
    {
        if (listField == fieldVar) {
            return blackBerryContacts.elementAt(index);
        }
        return null;
    }

    public int getPreferredWidth(ListField fieldVar ) {
        return Display.getWidth();
    }

    public int indexOfList(ListField fieldVar, String prefix, int start)
    {
        return -1; // not implemented
    }

    public static String getDisplayName(Contact contact) {
        if (contact == null) {
            return null;    }

        String displayName = null;

        // First, see if there is a meaningful name set for the contact.
        if (contact.countValues(Contact.NAME) > 0) {
            final String[] name = contact.getStringArray(Contact.NAME, 0);
            final String firstName = name[Contact.NAME_GIVEN];
            final String lastName = name[Contact.NAME_FAMILY];
            if (firstName != null && lastName != null) {
                displayName = firstName + " " + lastName;
            } else if (firstName != null) {
                displayName = firstName;
            } else if (lastName != null) {
                displayName = lastName;
            }
       } return displayName;
    }
}

1 Ответ

1 голос
/ 11 октября 2011

ListField не предназначен для этого.Его элемент списка не является Manager, поэтому вы не можете добавить в него дочерние поля.Другими словами, это невозможно с ListField на BB.ListField - это способ представления в пользовательском интерфейсе длинного списка без чрезмерного потребления ОЗУ (поскольку в этом случае существует единственный объект пользовательского интерфейса - ListField).

Если ваш список не слишком длинный (10 - 20 пунктов), затем рассмотрите возможность использования VerticalFieldManager вместо ListField.Если список длинный && вам действительно нужны флажки, рассмотрите возможность использования VerticalFieldManager + нумерация списка.

...