【问题标题】:Get delay on UI thread在 UI 线程上获得延迟
【发布时间】:2015-02-05 10:38:50
【问题描述】:

我正在使用以下代码 parent.getChildAt(itemPosition).setBackgroundColor(Color.parseColor("#FF9494")); 设置 listview 项目的颜色

这段代码我写在OnItemClickListener

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

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

谁能建议我如何做到这一点?

【问题讨论】:

    标签: android android-activity android-ui


    【解决方案1】:
        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();
    

    【讨论】:

    • 它在runOnUiThread 方法处显示错误“描述资源路径位置类型方法runOnUiThread(new Runnable(){}) 未定义类型new Runnable()”。
    • runOnUiThread()Activity 的方法。你需要添加类似MyActivity.this.runOnUiThread(...)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 1970-01-01
        • 2021-08-16
        • 1970-01-01
        • 2013-08-31
        相关资源
        最近更新 更多