BlackBerry LongClicklistener实施
-
13-09-2019 - |
题
我需要实施 OnlongClickListener 用于黑莓平台。
它可用于用户输入(EX电话键盘实现)或其他功能(导航,倒带控制,缩放控制等)。有要求:
- 目标控制要聆听 - 自定义按钮
- 它应该是4.5和4.6的版本编译,因此没有TouchEvents等。
- 可配置长时间的单击时间
您对概念和实施有一些建议吗?
另外,我可以在使用多个侦听器上用于同一字段的哪些问题?
谢谢!
解决方案
好吧,只是简单的建议。 Override NavigationClick和NavigationunClick-风暴将自动将屏幕上的按下映射到这些事件。
您必须使用单独的线程或计时器才能实际单击时间 - 否则就无法执行此操作(在这两个事件中,您确实会获得一个时间参数,但是您希望该事件在Unclick之前发射)。
另外,如果用户说unclicks,然后在长时间单击的间隔内再次单击,您还必须谨慎对待会发生什么。可能您想再次启动计时器。
多个听众不应该提供任何困难 - 假设无论实现听众的行为都很好(在回调方法中不会进行重大处理)。通常,BlackBerry UI组件一次最多可以有1个侦听器(这就是为什么有一个setchangelistener而不是addchangelistener)。除非有一个令人信服的理由与多个听众一起使用Android路线,否则我只坚持一个 - 它将使实现更加容易,并且与BB范式一致。
其他提示
我遵循了安东尼的建议,使用 Timertask 和Buttonfield。
用clumume_click风格befell,以某种方式 不包括NavigationClick事件.
另外,我已经在BOLD 9000/8900模拟器中遇到了麻烦,NavigationClick在TrackWheel之后被解雇 毫无疑问. 。但是样本与风暴效果很好。
界面:
public interface LongClickListener {
public void longClickEvent(Field field, int eventNumber);
}
控制本身:
public class LongClickButtonField extends ButtonField {
boolean mContinuousMode = false;
Timer mLongClickTimer = null;
long mLongClickDelay = 1000;
long mContinuousPeriod = 500;
LongClickListener mLongClickListener = null;
public LongClickButtonField(String label) {
super(label);
}
public LongClickButtonField(String label, boolean continuousMode) {
this(label);
mContinuousMode = continuousMode;
}
public void setLongClickListener(LongClickListener longClickListener) {
mLongClickListener = longClickListener;
}
protected boolean navigationClick(int status, int time) {
mLongClickTimer = new Timer();
final Field eventArg = this;
if(!mContinuousMode)
{
mLongClickTimer.schedule(new TimerTask() {public void run() {
mLongClickListener.longClickEvent(eventArg, 0);
}}, mLongClickDelay);
}
else
{
mLongClickTimer.schedule(new TimerTask(){
int eventNum= 0;
public void run() {
mLongClickListener.longClickEvent(eventArg, eventNum);
eventNum++;
}}, mLongClickDelay, mContinuousPeriod);
}
return true;
}
protected boolean navigationUnclick(int status, int time) {
mLongClickTimer.cancel();
return true;
}
}
利用:
public class Scr extends MainScreen implements LongClickListener {
LabelField mStatusLabel = new LabelField("status") {
protected void paint(Graphics graphics) {
graphics.setColor(Color.BLACK);
super.paint(graphics);
};
};
public Scr() {
LongClickButtonField button = new LongClickButtonField(
"click & hold 5 s");
LongClickButtonField buttonContinuous = new LongClickButtonField(
"click & hold > 5 s", true);
button.setLongClickListener(this);
buttonContinuous.setLongClickListener(this);
add(mStatusLabel);
add(button);
add(buttonContinuous);
}
public void longClickEvent(final Field field, final int eventNumber) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
mStatusLabel.setText(
((ButtonField) field).getLabel()
+ " event #"
+ String.valueOf(eventNumber));
}
});
}
}
不隶属于 StackOverflow