字段更改标签上的监听器

时间:2010-06-25 12:09:13

标签: blackberry blackberry-eclipse-plugin

我正在从json url中检索对象列表,并通过添加标签字段和分隔符将其显示为列表。现在,我想让每个标签都可以点击,这样每个标签都会重定向到一个单独的网址。单击标签时,必须使用相应URL的json数据打开单独的屏幕。所以,谁能告诉我如何实现这一目标。如果我得到一些如何操作的示例代码,我将非常感激...以下是我所做的一些示例代码...

public VerticalFieldManager showShoppingList(){
        try {
            jsArrShpList=new JSONArray(strShopping);
            totalList= jsArrShpList.length();
            for(int i=0;i<totalList;i++){
                 String strAlert=jsArrShpList.get(i).toString();
                 JSONObject joAlert=new JSONObject(strAlert);
                 String shoppingList = joAlert.get("CategoryName").toString();
                 LabelField shops  = new LabelField(shoppingList);
                 VerticalFieldManager vfmListRow=new VerticalFieldManager();
                 vfmListRow.add(shops);
                 vfmListRow.add(new SeparatorField());
                 vfmShpList.add(vfmListRow);

            }

            return vfmShpList;

1 个答案:

答案 0 :(得分:1)

为什么不在屏幕上使用ListField,而不是使用一堆通常不接受焦点或点击事件的LabelField?这似乎更像是你正在寻找的东西。

如果你想使用LabelField方法,你需要做一些事情。首先,在创建LabelField时,使用Field.FOCUSABLE样式以使其接受焦点:

LabelField shops  = new LabelField(shoppingList, Field.FOCUSABLE);

现在,由于LabelField字段在设置更改时不会调用更改侦听器,因此您需要在其父管理器中侦听单击和键事件。由于这些单击或键事件可以用于管理器中的任何字段,因此您需要在事件发生时检查哪个字段处于焦点,并根据焦点字段运行任何适当的处理程序。

代码示例:

VerticalFieldManager vfmListRow = new VerticalFieldManager() {
    protected boolean navigationClick(int status, int time) {
        Field field = getFieldWithFocus();
        if (field != null && field.equals(shops)) {
            System.out.println("shops field clicked");
            return true;
        }
        return super.navigationClick(status, time);
    }

    protected boolean keyChar(char key, int status, int time) {
        Field field = getFieldWithFocus();
        if (key == Characters.ENTER && field != null && field.equals(shops)) {
            System.out.println("shops field clicked");
            return true;
        }
        return super.keyChar(key, status, time);
    }
};