点击事件转移到下一个启动的活动

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那么此点击事件将转移到新启动ActivityonClick发生另一次处理.

我试过2.3.3和2.3.5框架版本和行为是一样的.有任何想法吗?

tri*_*ggs 1

一个简单的解决方案是添加一个布尔值来确定是否处理单击,然后创建一个休眠线程,然后将该值设置为 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。至于为什么会发生这种情况,我猜想新活动已经创建了新按钮,并且由于用户快速单击它会注册这些点击。