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



我受到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 &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) {
    }
}

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

您的问题不在于点击事件被转移到新的活动。问题是,在第一次点击后,你正在做你的新活动将开始出现。如果用户再次点击一些时间,你的新活动加载并接收点击,因为它应该做的。我假设你在活动变化期间阻塞了ui线程,因为用户不确定他是否已经点击了按钮并试图再次点击它。

试着固定你的活动切换。你可以用一个捕捉所有点击事件的Spinner来显示Overlay,直到你准备好显示Activity的正确UI。这样,用户就会意识到发生了什么事情,并停止点击,等待旋转器消失。

相关内容

  • 没有找到相关文章

最新更新