如何通过双击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议么 ? 什么是做错了?

Solutions Collecting From Web of "如何通过双击Android中的button来防止双代码运行"

你可以使用下面的代码: 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 } });