单击后的按钮保持按下状态直到方法结束
Posted
技术标签:
【中文标题】单击后的按钮保持按下状态直到方法结束【英文标题】:Button after click remains pressed till end of method 【发布时间】:2013-09-22 15:19:20 【问题描述】:我想使用同一个按钮来开始和停止播放一些声音,并在函数 play() 中使用 for 循环。 我想使用锁定变量来执行此操作,但单击后的按钮保持按下状态,直到功能播放结束执行。 您能提出一些解决方案吗?
我有这样的情况:
public class MainActivity extends Activity
private static SoundPool sound;
static int lock=1;
int s;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sound=new SoundPool(20, AudioManager.STREAM_MUSIC, 100);
s=sound.load(this,R.raw.bipsound, 0);
Button button = (Button) findViewById(R.id.button);
public void onClick(View v)
switch(lock)
case 0:
lock=1;
break;
case 1:
lock=0;
play();
break;
public void play()
for(int i=0;i<10;i++)
sound.play(s,1.0f, 1.0f, 1, 0, 1);
if(lock==1)
return;
try Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();
【问题讨论】:
【参考方案1】:这是try Thread.sleep(1000);
内部play()
的问题。您将主要的Thread
告诉sleep
,这几乎总是一个坏主意。 Button
被按下并保持该状态,直到 sleep()
时间结束。
删除该行。而且我不确定您要在那里完成什么,但您可以在单独的Thread
中使用TimerTask
之类的东西运行它,使用handler
或其他此类功能。如果您需要更多帮助,请说明您的目的。
【讨论】:
【参考方案2】:这很正常,因为您使用的是try Thread.sleep(1000);
,它会在 1 秒内停止主线程。
您必须使用 AsyncTask 来执行此操作:)
这是一个例子。
private void goToMainActivity()
new AsyncTask<Void, Void, Void>()
@Override
protected Void doInBackground(Void... params)
try
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();
return null;
@Override
protected void onPostExecute(Void result)
super.onPostExecute(result);
Intent intent = new Intent(fa, Main.class);
startActivity(intent);
.execute();
【讨论】:
以上是关于单击后的按钮保持按下状态直到方法结束的主要内容,如果未能解决你的问题,请参考以下文章
Unity UI Button 具有疯狂的过渡状态行为 - 单击后仍保持突出显示
如何通过单击按钮禁用 JQuery 功能,但默认保持打开状态?