在黑莓列表字段中动态添加项目

时间:2012-05-22 11:56:18

标签: listview blackberry

我是blackberry的新手,我希望动态添加项目到列表视图,我在列表字段中静态添加项目,但我想动态一些项目在这里我的代码

ListCallBack.java

import java.util.Vector;

import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;

public class ListCallBack implements ListFieldCallback{

private Vector listElements = new Vector();
public void drawListRow(ListField listField, Graphics graphics, int index,
        int y, int width) {
    // TODO Auto-generated method stub
    String text = (String)listElements.elementAt(index);
    graphics.drawText(text, 0, y, 0, width);
 // Draw a line separator above each field except the first one
    if (index != 0) {
        graphics.setColor(Color.BLACK);
        graphics.drawLine(0, y, width, y);
    }

}

public Object get(ListField listField, int index) {
    // TODO Auto-generated method stub
    return listElements.elementAt(index);
}

public int getPreferredWidth(ListField listField) {
    // TODO Auto-generated method stub
    return Display.getWidth();
}

public int indexOfList(ListField listField, String prefix, int start) {
    // TODO Auto-generated method stub
    return listElements.indexOf(listField);
}

public void insert(String toInsert, int index) {
    listElements.insertElementAt(toInsert, index);
}

public void erase() {
    listElements.removeAllElements();
}

}

和ListView.java

listItem = new ListField();
listCallBack =new ListCallBack();
listItem.setCallback(listCallBack);

listItem.insert(0);
listCallBack.insert("Can't Text Now Driving", 0);       
listItem.insert(1);
listCallBack.insert("Going to school", 1);    
listItem.insert(2);
listCallBack.insert("Picking Up the Kids", 2);
add(listItem);

任何人都可以帮助我?

2 个答案:

答案 0 :(得分:2)

您可以在ListField对象上调用invalidate()或invalidate(int index)来验证更改。试试看

// after calling insert(int index) call 
listItem.invalidate(index);

// and after calling erase call 
listItem.invalidate();

答案 1 :(得分:1)

如果要向List字段显示新项目,则将项目添加到向量(在您的情况下添加到listElements),然后使用增加的向量的大小调用listfield对象上的setsize()方法。

listItem.setSize(listElements.size());

你不直接将项目添加到列表字段。您将它添加到您的集合或数组。当drawlist被调用时,它会从集合中读取数据并自行渲染。

如此简单地执行以下步骤,

listElements.add(Object);

listItem.setSize(listElements.size());

然后你可以通过项目列表调用invalidate。

我希望我能给你一个想法,这样你就可以找到方法......

如果您有任何疑问,请与我联系。