单击后的按钮保持按下状态直到方法结束

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 具有疯狂的过渡状态行为 - 单击后仍保持突出显示

在页面加载时隐藏 div/popup 直到单击按钮

如何通过单击按钮禁用 JQuery 功能,但默认保持打开状态?

Android - 线程问题(按钮中的随机字符切换,直到单击按钮)

单击文件名时 PyQt5 QFileDialog 关闭

如何在按下另一个按钮之前更改按钮状态?