【发布时间】:2012-04-17 14:04:02
【问题描述】:
检查j2me中的CustomItem是否支持遍历?
j2me支持遍历中的CustomItem如何检查?
【问题讨论】:
检查j2me中的CustomItem是否支持遍历?
j2me支持遍历中的CustomItem如何检查?
【问题讨论】:
Shiva,我认为您对遍历的理解存在一些差距。让我解释一下。
您可以在表单中添加任意数量的项目。该框架为 MIDP 中内置的所有项目管理以下内容
但是,当您扩展 CustomItem 并实现自己的项目时,完全控制权在于实现。考虑一个表单包含 TextField 和 CustomItemImpl 并且您希望在 TextField 和 CustomItemImpl 之间切换的情况。由于键处理、命令处理和渲染都在 CustomItemImpl 的控制中,因此必须有一种方法让框架知道您何时希望 TextField 具有控制权以及何时需要将控制权传递给 CustomItemImpl。
这里是 CustomItem 中的 traverse() 方法的作用。当您在 CustomItemImpl 中完成渲染和捕获数据时返回 false,当您希望在 CustomItemImpl 中保留控件时返回 true。
让我进一步详细说明。假设您正在实现一个 TreeItem。当焦点位于 TreeItem 上时,您希望执行以下操作:
以上所有功能都构成了 TreeItem 实现的一部分。但是,当您将 KEY_UP 移动到树的第一个节点或将 KEY_DOWN 移动到树的最后一个节点时,您希望移动到 TextField / 与此 TreeItem 相邻的任何其他项目。让框架知道你的意图的方式是
希望这能澄清您的疑问。我强烈建议您查看这个特别的 example 以获得更具体的说明。
【讨论】:
我找到了解决方案。它对我有用。
正确的解决方案是设备调用“javax.microedition.lcdui.CustomItem”类的方法“getInteractionModes()”来支持查找CustomItem遍历。
下面给出代码sn-p
int supported_interaction_modes=this.getInteractionModes();
boolean horizontal__interaction,vertical_interaction;
if((supported_interaction_modes&CustomItem.TRAVERSE_HORIZONTAL)!=0) //Horizontal traverse support
horizontal_interaction=true;
else
horizontal_interaction=false;
if((supported_interaction_modes&CustomItem.TRAVERSE_VERTICAL)!=0)
vertical_interaction=true;
else
vertical_interaction=false;
在上面的代码 sn-p 中,“this”是指派生自“javax.microedition.lcdui.CustomItem”的类的对象
【讨论】:
boolean isCustomItemSupported;
try {
Class.forName("javax.microedition.lcdui.CustomItem");
isCustomItemSupported = true;
} catch (Exception e) {
isCustomItemSupported = false;
}
【讨论】: