在Android中似乎没有触发Java runnable

时间:2013-08-05 22:54:30

标签: java android runnable

我正在制作一个非常简单的测试应用程序,并设置seekBar的位置我正在使用runnable。虽然我对实际使用runnable的经验很少。

public class MySpotify extends Activity implements Runnable {

    private SeekBar progress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spotify_app);
        myProgress = (SeekBar) findViewById(R.id.myBar);
    }

    @Override
    public void run() {
        myProgress.setProgress(25);
    }
}

如果我将myProgress.setProgress(25);移到onCreate中,那么它就可以了。但我希望它能在runnable中出发。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您需要post() RunnableThread才能执行此操作。尝试在post(this);内拨打onCreate()

答案 1 :(得分:0)

尝试

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.spotify_app);
    myProgress = (SeekBar) findViewById(R.id.myBar);

    myProgress.post(new Runnable()
    {       
        public void run()
        {
            myProgress.setProgress(25);
        }
    });
}

您需要在

上运行post()方法

答案 2 :(得分:0)

只需调用run()即可启动run方法; 请注意它将在主线程上执行。 还要注意,由于没有循环,它只会运行一次。

如果你想在做其他事情时更新,你可以创建一个新线程。

示例:

public class MySpotify extends Activity{

    private SeekBar myProgress; //I asume it is call "myProgress" instead of "progress"

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spotify_app);
        myProgress = (SeekBar) findViewById(R.id.myBar);

        ThreadExample example = new ThreadExample();
        example.start();
        /* Start a new thread that executes the code in the thread by creating a new thread.
         * If ou call example.run() it will execute on the mainthread so don't do that.
         */
    }

    private class ThreadExample extends Thread{
        public void run() {
            myProgress.setProgress(25);
        }                    
    }
}