Java 在Android中滚动后,Recyclerview布局管理器将视图放置到位
Java 在Android中滚动后,Recyclerview布局管理器将视图放置到位,java,android,android-layout,android-recyclerview,Java,Android,Android Layout,Android Recyclerview,Recyclerview正在使用它的LinearLayoutManager像那样滚动lm。滚动位置带偏移量(位置,偏移量)。在滚动之前,如何获取处于滚动位置的视图?将滚动的视图在滚动后返回null,因为尚未创建。我尝试了Runnable、Observer和onLayoutCompleted但仍然为空。如何获取视图 lm.scrollToPositionWithOffset(position, offset); recyclerView.post(new Runnable(){ @Ove
Recyclerview
正在使用它的LinearLayoutManager
像那样滚动lm。滚动位置带偏移量(位置,偏移量)
。在滚动之前,如何获取处于滚动位置的视图?将滚动的视图在滚动后返回null,因为尚未创建。我尝试了Runnable
、Observer
和onLayoutCompleted
但仍然为空。如何获取视图
lm.scrollToPositionWithOffset(position, offset);
recyclerView.post(new Runnable(){
@Override
public void run(){
View v1 = recyclerView.getChildAt(position); // returning null.
View v2 = recyclerView.getLayoutManager().getChildAt(position); // returning null.
}
});
recyclerView.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
View v1 = recyclerView.getChildAt(position); // returning null.
View v2 = recyclerView.getLayoutManager().getChildAt(position); // returning null.
recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}});
@Override // in LinearLayoutManager
public void onLayoutCompleted(RecyclerView.State state) {
super.onLayoutCompleted(state);
View v1 = recyclerView.getChildAt(position); // returning null.
View v2 = this.getChildAt(position); // returning null.
}
如果试图修改视图内容,应执行以下操作:
itemList.get(position)//并更改
此处用于处理该状态的任何属性
ViewHolder上有正确的逻辑来处理
这会发生变化,应该会修改您的视图
视图持有者
进行更改,您也可以这样做:recyclerView.findViewHolderForAdapterPosition(position)
,然后:
if(空!=保持器){
holder.itemView.findviewbyd(R.id.YOUR\u id)//调用您想要的任何方法
}
我真的推荐第一种选择,但这取决于你。希望这对你有帮助
RecyclerView
在滚动时创建/重用视图-不可见的视图不存在或当前分配到不同位置,因此在布局之前尝试获取视图是不可能的。是,你说得对,但在创建滚动视图时,应该有一个侦听器用于捕获。通常,你不应该直接修改RecyclerView
视图,因为它们的内部状态非常不稳定。相反,您应该修改您的数据集,调用adapter.notifyItemChanged(position)
并在adaptersonBindViewHolder(ViewHolder,position)
中反映状态更改。为什么在滚动时需要项目的布局?当项目出现在屏幕上时,是否要更改其布局?您到底想什么时候更改布局?为什么?请提供更多详细信息,因为我想强调滚动项目。感谢回复,但持有人在屏幕外返回空值。至于您的第一个意见,我不想使用dataset exept data.thansk@plesser
View v = lm.getChildAt(position);
lm.scrollToPositionWithOffset(position, offset);
v.post(new Runnable() {
@Override
public void run() {
// View is ready here.
});