我正在使用以下代码listview
parent.getChildAt(itemPosition).setBackgroundColor(Color.parseColor("#FF9494"));
项的颜色
我在OnItemClickListener
写的这段代码。
设置颜色后,我希望将此颜色保持4秒钟,然后将项目的颜色恢复为之前的颜色(比如白色)。
我尝试在UI线程上进行睡眠,但我知道这不是一种正确的方法。
有谁能建议我如何实现这个目标?
答案 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方法中。