我正在创建一个水平回收站视图,该视图在特定时间(例如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
希望有人会帮助您。 谢谢。 }
答案 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生命周期清理计时器,例如在应用程序进入后台时停止运行,并在应用返回时重新启动进入视野。在StoryFragment
和onResume
中这样做是一个好主意。
此外,您应该更改为普通的onPause
,而不是Timer
,将间隔设置为CountDownTimer
,然后每隔5 seconds
,将列表滚动到一个项目。