paw*_*ban 5 android onclick event-handling android-activity
我受到Android中奇怪事件处理的影响.我的问题是,如果用户Button多次点击非常快,那么事件就会排队并进一步转移到下一个Activity.
这是一个例子:
<Button
android:id="@+id/btn_home_show"
style="@style/main_buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/home_label_show" />
Run Code Online (Sandbox Code Playgroud)
Activity onClick:
public void onClick(View view) {
int viewId = view.getId();
if (viewId == EXPECTED_VIEW_ID) {
Intent intent = new Intent(this, CarouselActivity.class);
startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Activity我有另一个可点击的项目与屏幕上相同的坐标.
会发生的情况是,如果用户点击非常快,Button那么此点击事件将转移到新启动Activity并onClick发生另一次处理.
我试过2.3.3和2.3.5框架版本和行为是一样的.有任何想法吗?
一个简单的解决方案是添加一个布尔值来确定是否处理单击,然后创建一个休眠线程,然后将该值设置为 true
public void onClick(View view) {
if (inputAllowed) {
//do stuff
}
}
boolean inputAllowed = true;
private class ButtonDelay extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... params) {
try {
inputAllowed = false;
Thread.sleep(500);
inputAllowed = true;
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(final Void unused) {
}
}
Run Code Online (Sandbox Code Playgroud)
并在 onCreate() 中立即启动 asynctask。至于为什么会发生这种情况,我猜想新活动已经创建了新按钮,并且由于用户快速单击它会注册这些点击。