首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >On key down循环,直到key up

On key down循环,直到key up
EN

Stack Overflow用户
提问于 2012-06-29 23:19:28
回答 1查看 649关注 0票数 0

我有一个搜索栏,它是由按钮控制的,而不是使用设置/获取进度的滑块。

我试图让搜索栏的进度在用户按下按钮时增加,然后在用户松开按钮时停止增加。我有一个onkey监听器,可以上下检测。我只是不知道把setprogress部分放在哪里,如果我在ACTION_DOWN上放了一个循环,然后它就会循环,而不是检测ACTION_UP,如果我对ACTION_DOWN有一个while循环,似乎也会发生同样的事情。

我想我可能还需要设置refreshDraweableState,但我也没有太多的经验。

我可能会尝试过多地使用搜索栏,但如果有任何帮助/建议,我将不胜感激。谢谢!

这是我的keylistner,这是我一直在胡闹的地方。

代码语言:javascript
复制
public boolean onKey(View view, int keyCode, KeyEvent event) {
    builder.setLength(0);
    switch (event.getAction()){
        case KeyEvent.ACTION_DOWN:
            builder.append(event.getKeyCode());
            String text = builder.toString();
            Log.w("seekbar", text);
            textView.setText(text);
            while (sk.getProgress() < 100){
                sk.setProgress(sk.getProgress()+1);
                sk.refreshDrawableState();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    break;
                }
            }
            break;
        case KeyEvent.ACTION_UP:
            break;
    }
    return true;
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 23:37:30

您甚至需要能够在ACTION_DOWN中停止while循环,否则它将一直运行到99。

另外,你的while循环阻塞了UI线程,所以我会把它放到一个新的线程中(我不确定如何在普通的安卓上做到这一点,我使用Mono for Android),然后要么在ACTION_UP事件发生时停止这个线程,要么在你的while循环中放入另一个中断它的检查。

在Android的Mono中,这可能是这样做的:

代码语言:javascript
复制
public bool OnKey(View view, int keyCode, KeyEvent e)
{
    switch(e.Action)
    {
        case KeyEventAction.Down:
            Start();
        break;
        case KeyEventAction.Up:
            Stop();
        break;
    }
}

private volatile bool _shouldStop;

public void IncreaseProgress()
{
    while (!_shouldStop && sk.Progress < 100)
    {
        //Working
        RunOnUiThread(() => {
            sk.Progress = sk.Progress+1;
            sk.RefreshDrawableState();
        });
        Thread.Sleep(50);
    }
    //Terminating
}

public void Start()
{
    _shouldStop = false;
    Thread workerThread = new Thread(IncreaseProgress);
    workerThread.Start();
}

public void Stop()
{
    _shouldStop = true;
    workerThread.Stop();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11264464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档