[英]How to change visibility of hidden items of RecyclerView?
I'm developing chat app.我正在开发聊天应用程序。 It has a feature that is reply action (like Telegram/WhatsApp).
它具有回复操作(如 Telegram/WhatsApp)的功能。 When user click replied message then a RecyclerView should scroll to declared position.
当用户点击回复消息时,RecyclerView 应该滚动到声明的 position。 But if I set position of hidded item of recyclerview, app throw a NullPoinerException.
但是,如果我设置了 recyclerview 的隐藏项的 position,应用程序会抛出 NullPoinerException。 It is working for only visible items.
它仅适用于可见项目。
holder.replyContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRecyclerView.smoothScrollToPosition(m.content.getReply().getPosition());
View view = mRecyclerView.
findViewHolderForAdapterPosition(m.content.getReply().getPosition())
.itemView.findViewById(R.id.selected);
view.setVisibility(View.VISIBLE);
view.startAnimation(AnimationUtils.loadAnimation(mActivity, R.anim.fade_out));
}
});
I have fixed it, the invisible items of methods are must be call after scrolling finished.我已经修复它,方法的不可见项必须在滚动完成后调用。 So, I added listener to RecyclerView:
所以,我在 RecyclerView 中添加了监听器:
RecyclerView.OnScrollListener listener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder)
mRecyclerView.findViewHolderForAdapterPosition(replyPosition);
if(holder != null) {
View view = holder.itemView.findViewById(R.id.selected);
view.setVisibility(View.VISIBLE);
view.startAnimation(AnimationUtils.loadAnimation(mActivity,
R.anim.fade_out));
}
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
}
};
mRecyclerView.addOnScrollListener(listener);
mRecyclerView.smoothScrollToPosition(replyPosition);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.