延迟UI线程

时间:2015-02-05 10:38:51

标签: android android-activity android-ui

我正在使用以下代码listview

设置parent.getChildAt(itemPosition).setBackgroundColor(Color.parseColor("#FF9494"));项的颜色

我在OnItemClickListener写的这段代码。

设置颜色后,我希望将此颜色保持4秒钟,然后将项目的颜色恢复为之前的颜色(比如白色)。

我尝试在UI线程上进行睡眠,但我知道这不是一种正确的方法。

有谁能建议我如何实现这个目标?

3 个答案:

答案 0 :(得分:6)

    parent.getChildAt(itemPosition).setBackgroundColor(Color.parseColor("#FF9494"));
    // Start new Thread that sets the color back in 4 seconds
    new Thread(new Runnable() {
        @Override
        public void run() {
            SystemClock.sleep(4000); // Sleep 4 seconds
            // Now change the color back. Needs to be done on the UI thread
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    parent.getChildAt(itemPosition).setBackgroundColor(Color.parseColor("#000000")); // use whatever other color you want here
                }
            });
        }
    }).start();

答案 1 :(得分:2)

主线程中有一个looper。为此,可以安排Runnable延迟。在OnItemClickListener范围内,您的代码可以简单到:

@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
    view.setBackgroundColor(Color.parseColor("#FF9494"));
    view.postDelayed(new Runnable() {
        @Override
        public void run() {
            view.setBackgroundColor(Color.parseColor("#FFFFFF"));
        }
    }, 4000);
}

答案 2 :(得分:1)

可能您可以尝试实现asyncTask,然后可以从onItemClickListener调用它。此asyncTask的doInBackground方法可以包含一个sleep方法,以避免一段时间内调用onPostExecute。在onPostExecute中,您可以根据需要重置颜色 如果睡眠方法不能像我期望的那样在doInBackground方法中编写,那么在更改文本颜色之前,也要将sleep方法放在onPostExecute方法中。