如何通过双击Android中的button来防止双代码运行

如果我点击快速到我的Android应用程序中的button,它似乎后面的代码运行两次。 如果我点击我的菜单button两次,必须启动onclick的活动只是开始两次,我不得不退出它两次。

这真的很烦人,因为如果我点击菜单button太快,我可以加载一大堆活动在后台,我必须一一退出,所以这显然是我的应用程序,我想解决这个问题。

我可以怎样处理这个问题?

我使用简单的onClickListeners和button

编辑:

关于答案和评论我的菜单button看起来像这样:

top20Button.setOnClickListener(new OnClickListener() { public void onClick(View v) { favButton.setClickable(false); nearButton.setClickable(false); highlightedButton.setClickable(false); top20Button.setClickable(false); Intent i = new Intent(); i.putExtra("showDialog", false); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); i.setClass(Search.this, Top20.class); startActivity(i); finish(); } }); 

在所有这些纠正后,它仍然是一样的:S当我点击一个疯狂的人多个活动是在历史堆栈,我必须退出多次。

有什么build议么 ? 什么是做错了?

  • 从linearlayout以编程方式在两个按钮之间设置边距
  • 如何更改我的Android应用程序中所有文本的默认颜色?
  • Android:如何处理button点击
  • 什么是button的“state_focused”状态?
  • Android:在按钮上转到HTTP URL
  • Android:减小button的大小
  • 禁用带按钮选择器的按钮
  • 如何正确删除Android中按钮周围的填充(或边距?)?
  • 你可以使用下面的代码: btn.setEnabled(false);

     btn.setOnclickListener(new View.onClickListener(){ public void onClick(View v) { btn.setEnabled(false); } }); 

    您可以像这样临时禁用视图

     public static void disableTemporarly(final View view) { view.setEnabled(false); view.post(new Runnable() { @Override public void run() { view.setEnabled(true); } }); } 

    那么,这是预期的行为…

    用SINGLE_TOP标志启动您的新function

    或者尝试在AndroidManifest.xml中为Top20活动设置android:launchMode="singleInstance"

    这解决了多个活动实例的问题,并仍然播放默认的animation

     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    这个解决scheme更符合我的要求。 而是使用启用/禁用视图function。 我使用的时候,首先创build一个variables来存储上次用户按下视图的时间*然后当用户按下视图时,捕获variables中的时间以比较当前时刻和上次用户按下视图的时间,如果时间之间的微分时间太小,意味着快速,或者极其快速,就忽略它,就是这样。 但是,如果对你来说是一个合理的时间,那么把当前时间的最后一个variables设置成你想做的事情。

     @Override public void onListItemClick(ListView list, View item, int position, long id) { Long now = System.currentTimeMillis(); if((now - lastTimeSelected) > 500){ lastTimeSelected = now; // your code goes here } else { Log.i(TAG, "Too fast!"); } } 

    我在其他post上看到了类似的答案 ,但似乎没有人喜欢这种方法。

    将以下代码snipet添加到Androidmanifest.xml中的Activity定义中

     android:launchMode = "singleTask" 

    使用Application类中的frozenvariables。

    那是

     public class App extends Application { public static boolean frozen = false; } 

    某处点击:

     //... onClick() { if (frozen) { return; } frozen = true } //... 

    举个例子,当新的Activity被启动的时候

     onCreate (...) { super.onCreate(...); frozen = false; } 

    AndroidManifest.xml

     <application android:allowBackup="true" android:largeHeap="true" android:name="com.example.App" android:icon="@drawable/icon" android:label="@string/app_alias" android:theme="@style/AppTheme" > 
      Button.setOnClickListener(new View.OnClickListener { @Override public void onClick(final View v) { v.setEnabled(false); v.postDelayed(new Runnable() { @Override public void run() { v.setEnabled(true); } },150); //150 is in milliseconds } });