Recyclerview适配器中的CountdownTimer无法正常运行

时间:2018-07-30 17:36:32

标签: android android-recyclerview recycler-adapter android-viewholder

我正在创建一个水平回收站视图,该视图在特定时间(例如5秒钟)后自动滚动。 我使用了倒数计时器。但是,它没有按预期工作。计时器运行不正常。有时候,它一次跳两个或多个回收器项目。

这是我的代码:

class StoryViewHolder extends RecyclerView.ViewHolder {
{
CountDownTimer timer;
....
}
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
{
.....
if (holder.timer != null) {
            holder.timer.cancel();
        }

        holder.timer = new CountDownTimer(5000, 1000) {
            @Override
            public void onTick(long timeLeft) {

            }

            @Override
            public void onFinish() {
                StoryFragment.scrollToPosition((position+1));
            }
        };
        holder.timer.start();
}

我的问题与此问题相似。但是他们说的答案行不通。 Set counter inside RecyclerView

希望有人会帮助您。 谢谢。     }

1 个答案:

答案 0 :(得分:2)

我建议将BindingProvider bindingProvider = (BindingProvider) services; bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, filenetWsUrl); Map<String, List<String>> headers = new HashMap<String, List<String>>(); headers.put("X-APPCERT", Arrays.asList(StringUtils.trimToEmpty(PropertyUtil.getProperty("FILENET_APP_CERT")))); bindingProvider.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,headers); bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, filenetWsUrl); SSLContext sc = SSLContext.getInstance(StringUtils.trimToEmpty(PropertyUtil.getProperty("SSL_CONTEXT"))); KeyManagerFactory factory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(new FileInputStream(PropertyUtil.getProperty("JKS_LOC_VALUE")), jksPwd); factory.init(keyStore, jksPwd); sc.init(factory.getKeyManagers(), null, null); //sc.init(factory.getKeyManagers(), null, null); //End Trust Store ((BindingProvider) services).getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, sc.getSocketFactory()); 移到CountDownTimer之外。您的ViewHolder通常仅用于在ViewHolder中渲染该项目。让它做很多事情不是一个好主意,例如处理列表的滚动。

我会将其移至您的RecyclerView中,这将允许您根据Android生命周期清理计时器,例如在应用程序进入后台时停止运行,并在应用返回时重新启动进入视野。在StoryFragmentonResume中这样做是一个好主意。

此外,您应该更改为普通的onPause,而不是Timer,将间隔设置为CountDownTimer,然后每隔5 seconds,将列表滚动到一个项目。