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

时间:2011-11-30 12:20:48

标签: android android-activity event-handling onclick

我受到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" />

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);
    }
}

在我的Activity我有另一个可点击的项目,屏幕上的坐标相同。

如果用户在Button上非常快速地点击,那么此点击事件将转移到新启动的Activity,并且会发生另一个onClick处理。

我试过2.3.3&amp; 2.3.5框架版本&amp;行为是一样的。有什么想法吗?

2 个答案:

答案 0 :(得分: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) {

    }

}

然后立即在onCreate()中启动asynctask。至于为什么会发生这种情况,我猜新活动已经创建了新按钮,并且由于用户正在快速点击它,所以注册这些点击。

答案 1 :(得分:1)

问题不在于点击事件是否已转移到新活动。问题是,在您第一次点击后,您的新活动将开始出现。如果用户再次单击您的新活动会加载并接收按预期执行的操作。我假设您在活动更改期间阻止了UI-Thread,因此用户不确定他是否按下按钮并尝试再次单击它。

尝试加快您的活动切换。您可以使用Spinner显示Overlay,捕获所有点击事件,直到您准备好显示活动的正确UI。通过这种方式,用户意识到发生了某些事情,并将停止点击并等待微调器消失。