0

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

我试图让搜索栏进度在用户按下按钮时增加,然后在他们抬起按钮时停止增加。我有一个 onkey 监听器,可以检测上下。我只是不确定将 setprogress 部分放在哪里,如果我在 ACTION_DOWN 上放置一个循环,那么它会循环而不是检测 ACTION_UP,如果我有一个用于 ACTION_DOWN 的 while 循环,似乎也会发生同样的情况。

我想我可能还必须设置 refreshDraweableState,但我也没有太多看。

可能我试图过多地使用搜索栏,但我会很感激任何帮助/建议。谢谢!

这是我的 keylistner,这是我一直在搞乱的地方。

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;
}

}

4

1 回答 1

0

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

你的while循环也阻塞了UI线程,所以我会把它放在一个新线程中(不知道如何在普通Android上做到这一点,我使用Mono for Android),或者在ACTION_UP事件发生时停止该线程,或者进行另一个检查在你的while循环中打破它。

在 Android 的 Mono 中,这样做有点像这样:

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();
}
于 2012-06-29T15:37:29.990 回答