我在某些手机中的线程和`onclick监听器实例有一个奇怪的行为(奇怪的是它不是由android版本,在带有android 4.03的GalaxyII中测试它并且工作,在带有3.2的Samsumg Galaxy Tab中工作正常并且在一个HTC EVO Design 4G with android 4.03 and a HTC EVO 4G with android 2.3.3 不起作用)所以这里是问题:
我有一个异步类,它调用 Web 服务并阻塞屏幕,直到服务完成,然后线程通知 UI 服务调用已完成,因此 UI 显示一个模态屏幕addView(GenerateView)
,对活动进行操作。这很好用,直到我需要避免触发操作的按钮中的多次单击,因为多个视图正在添加到活动中。所以我实现了OnClickListener
这样的自定义:
public abstract class OnOneClickListener implements OnClickListener {
private boolean clickable;
public OnOneClickListener(){
clickable = true;
}
public final void onClick(View v) {
if (clickable) {
clickable = false;
onOneClick(v);
}
}
public abstract void onOneClick(View v);
public void reset() {
clickable = true;
}
}
因此,我实现了 custom onclick
,阻止了按钮的可点击性,调用了 Web 服务,当它在创建并返回视图的函数中完成时,以模态窗口调用的形式添加到活动中,reset()
并允许再次单击按钮。该函数通过参数接收类的实例。这就像前面提到的手机中的魅力,但在 HTC 中,当我调试时可以看到该OnOneClickListener()
函数修改了可点击变量并且该reset()
函数看不到它!它也以另一种方式发生,比如如果在类的两个不同实例中调用函数并且它不是!这只是我在 HTC 和线程方面遇到的一个问题,最令人难以置信的一个。
所以这是我的问题:
- HTC 和线程有一些已知问题吗?
- 有什么解决办法吗??(我正在使用 AsyncTask 进行调用,直到现在它都运行良好)
事实上,你能告诉我的任何能帮助我理解失败在哪里的东西都会非常有帮助,因为它让我发疯。