在 UI 线程上获取延迟

Get delay on UI thread

我正在使用以下代码 parent.getChildAt(itemPosition).setBackgroundColor(Color.parseColor("#FF9494"));

设置 listview 项的颜色

这段代码我写在OnItemClickListener.

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

我尝试让 UI 线程休眠,但我知道这不是正确的方法。

任何人都可以建议我如何实现这一目标吗?

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

    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();

主线程中有一个循环程序 运行。为此,可以安排 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);
}