我正在尝试使用FieldManagers(水平和垂直)创建列表。在此列表中,我有多个可点击的项目,例如按钮,因此我没有使用ListField
或ObjectListField
。
我已成功创建了UI,但我无法附加来自服务器的特定项ID。此外,在单击任何列表行中的特定按钮时,我想获取项目ID并希望针对该ID执行操作。
那么,请让我知道在使用FieldManager时如何将id附加到特定行的想法,以及如何在单击按钮时针对该ID生成事件?
答案 0 :(得分:2)
当你创建一行时,你可能正在为每一行创建一个(子类)Manager
。
至少,您似乎在每行创建ButtonField
。
您可以做的是在创建时将 Cookie 附加到每一行或每个按钮。 cookie 只是附加到对象的额外信息。然后,当单击该行或按钮时,您会询问cookie的行/按钮,并使用它来标识行ID。
每个BlackBerry Field都可以附加一个cookie。由于Cookie的类型为Object
,因此您可以随心所欲地制作它。
例如,在为行创建按钮时:
for (int i = 0; i < numRows; i++) {
BitmapButtonField button = new BitmapButtonField(onImage, offImage, ButtonField.CONSUME_CLICK);
// use the row index as the cookie
button.setCookie(new Integer(i));
button.setChangeListener(this);
Manager row = new MyRowManager();
row.add(button);
add(row);
}
然后点击按钮时:
void fieldChanged(Field field, int context) {
Object cookie = field.getCookie();
if (cookie instanceof Integer) {
Integer rowId = (Integer)cookie;
System.out.println("Row Id = " + rowId);
}
}
注意:我正在使用BlackBerry Advanced UI BitmapButtonField,但Cookie技术适用于任何Field
或Manager
类。 See another example here