Java 如何在每个recyclerview项目之间添加延迟?

Java 如何在每个recyclerview项目之间添加延迟?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想设置每个recyclerview项目之间的延迟时间。我有一个具体的时间延迟,我想为每个项目的清单。现在使用下面的代码,它可以为较少的项目工作,但是如果有15-20个项目,那么多个项目将同时启动。我假设这是因为其他项目没有显示,它会将它们视为第一个项目并启动计时器 holder.timer.postDelayed(new Runnable() { @Override public void run() { new

我想设置每个recyclerview项目之间的延迟时间。我有一个具体的时间延迟,我想为每个项目的清单。现在使用下面的代码,它可以为较少的项目工作,但是如果有15-20个项目,那么多个项目将同时启动。我假设这是因为其他项目没有显示,它会将它们视为第一个项目并启动计时器

holder.timer.postDelayed(new Runnable() {
            @Override
            public void run() {
                new CountDownTimer((long) (time.get(holder.getAdapterPosition()) * 60000), 1000) {
                    public void onTick(long millisUntilFinished) {
//timer.setText("minutes remaining: " + millisUntilFinished);
//here you can have your logic to set text to edittext
                        holder.timer.setText("" + String.format(FORMAT,
                                TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
                                        TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
                                TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
                                        TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
                    }
                    public void onFinish() {
                        holder.timer.setText("done!");
                    }
                }.start();
            }
        },  delay* 60000);

现在,这对4-5个项目很有效,但对于10-15个项目,当我滚动2个或3个项目的计时器同时启动,而不是等待前一个项目完成时,只需使用一个项目初始化recyclerview即可

然后用
System.currentTimeMillis()计算时间,

两秒钟后,在recyclerView列表中添加一个项目,并调用
notifyItemInserted()
通知适配器插入了一个新项目

大概是这样的:

long initialTime = System.currentTimeMillis();
long now = System.currentTimeMillis();
while(now - initialTime < 2000){
    now = System.currentTimeMillis();
}
//now code after two seconds..
mainList.add(item);
adapter.notifyItemInserted();
long initialTime=System.currentTimeMillis();
long now=System.currentTimeMillis();
而(现在-初始时间<2000){
现在=System.currentTimeMillis();
}
//现在,请在两秒钟后编码。。
主列表。添加(项目);
adapter.notifyItemInserted();

我想你把计时器代码放错地方了。您似乎把它放在了binviewholder中,它在每次初始化新视图时都会被实例化。最初屏幕上有2到3个视图,所以一切正常,但当你滚动新视图时,新视图被初始化,这就是计时器重新启动的原因,我仍然没有得到你想要的结果。请elaborate@HarKal是的,你理解对了,那么现在我应该把计时器放在哪里?请把我的代码改成:现在发生的是它一次显示所有项目。请让我知道如何使它正确?您正在等待两秒钟,然后立即添加整个项目。您应该将列表中的项目逐个添加到适配器中,并在每个项目后调用notifyItemInserted();在for循环中。如果将以下行保留在循环之外,则显示未定义适配器的错误
adapter=new TimerListAdapter(TimerActivity.this,list4);adapter.notifyItemChanged(list4.size(),list4);recyclerView.setAdapter(适配器)请告诉我如何一次只输入一项?好的,你应该在for语句前加上几行(新的TimerListAdapter和setAdapter)。然后使用适配器。添加(项);在“for statement”中,然后是notifyItemChanged()。