在我的RecyclerView中,删除,添加或更改项目时会播放默认动画。
但是,对项目进行其他更改很烦人,因为如果它仍然认为RecyclerView处于动画中间,有时它不会及时更新。
所以我想等一下,然后调用适配器的最后更新,以确保做出这些更改。
我试过了:
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
refreshAdapter();
}
});
}
}).run();
然而由于某种原因,睡眠命令似乎仍占据主线程!我在DialogFragment上按OK后启动它,然后它会在它向前移动一秒钟之前挂起它,并且当它执行时,它不会执行任何动画并直接跳转到最终结果。
我该如何解决这个问题?
答案 0 :(得分:3)
问题是您在Thread
而不是start()
上拨打postDelayed(Runnable, long)
。
或者,您可以使用主线程中的处理程序new Handler()
.postDelayed(new Runnable(){
public void run(){
refreshAdapters();
}
}, 1000);
来实现您在较少代码中尝试执行的操作:
new Handler()
.postDelayed(() -> refreshAdapter(),
1000);
或者
list_b = ['04/Sep/2016:00:00:03 -0400', '04/Sep/2016:00:00:04 -0400', '04/Sep/2016:00:00:05 -0400',
'04/Sep/2016:00:00:06 -0400', '04/Sep/2016:00:00:06 -0400', '04/Sep/2016:00:00:08 -0400',
'04/Sep/2016:00:00:08 -0400', '04/Sep/2016:00:00:08 -0400', '04/Sep/2016:00:00:11 -0400',
'04/Sep/2016:00:00:15 -0400', '04/Sep/2016:00:00:19 -0400', '04/Sep/2016:00:00:20 -0400',
'04/Sep/2016:00:00:23 -0400', '04/Sep/2016:00:00:25 -0400', '04/Sep/2016:00:00:26 -0400']
duplicates = set()
for i in list_b:
indices = [pos for pos, s in enumerate(list_b) if s == i]
if len(indices) > 1:
duplicates.add("%s Ammount of duplicates: %d Index of duplicates: %s" % (i, len(indices), indices))
for dup in duplicates:
print(dup)