2

我需要制作一个包含可点击号码的标签,以便当用户点击标签时会拨打电话号码(或向用户显示拨打电话的选项)。当我此时单击标签时,我只会得到一个工具提示类型的菜单,其中包含复制数字的选项...

private LabelField contactPhoneNumberField = new LabelField(number,Field.FOCUSABLE)
{
        protected boolean navigationClick()
        {
            // write your code on click
            // make the call
            PhoneArguments callArgs = new PhoneArguments(
                PhoneArguments.ARG_CALL, number);
            Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, callArgs);
            return true;
        }

    };
4

3 回答 3

2

一个忠告。您不应该使用 navigationClick() 来处理点击。改写 navigationUnclick() 方法并处理 Unclick。

  1. 这符合标准用户界面行为。几乎所有原生字段,如按钮,黑莓上的列表字段都在取消点击而不是点击时执行操作。甚至窗口上的按钮和链接也遵循相同的概念。

  2. 如果您对更改焦点的 navigationClick() 执行一些操作 - 例如推送新屏幕,则 navigationUnclick 将在焦点的新字段上调用。如果该字段是按钮,则该按钮将被单击。

  3. 如果焦点没有改变,那么 navigationUnclick() 将返回未处理。这将导致屏幕的 navigationUnclickUnhandled() 将显示“工具提示类型的菜单”。

于 2012-08-16T21:22:31.900 回答
2
final LabelField contactPhoneNumberField = new LabelField("",Field.FOCUSABLE) {
public boolean navigationClick (int status , int time){
    PhoneArguments callArgs = new PhoneArguments(
    PhoneArguments.ARG_CALL, number);
    Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, callArgs);
    return true;

} };

玩了一段时间后发现我需要添加 int status 和 int time 参数

于 2012-08-15T10:21:03.113 回答
2

我认为执行流程不会进入您的navigationClick()方法,因此您会得到工具提示而不是想要的功能。

似乎点击事件没有到达您的标签实例,并且之前已被消耗。例如由容器类实例(屏幕/管理器)。

检查naviagationClick()容器屏幕类/管理器实例的方法,并确保您的标签实例获得点击事件。

于 2012-08-15T09:36:49.753 回答