我已经在RecyclerView
中构建了一个由CardView
列表组成的基本接口。当添加卡片时,我需要知道它是否在屏幕上可见。
我试图通过使用布局管理器的findLastVisibleItemPosition()
方法来获取它,但是它似乎返回的结果比预期的少了一项。例如,如果我有一张可见的卡,findLastVisibleItemPosition()
将返回-1
(其中可见卡的索引应该是0
)。
我简化的核心方法如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
items = new ArrayList<>();
RecyclerView recycList = (RecyclerView) findViewById(R.id.rv);
recycList.setHasFixedSize(true);
llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
recycList.setLayoutManager(llm);
recycList.addOnChildAttachStateChangeListener(new ChildAttachListener(llm));
adapter = new RecycAdapter(items);
recycList.setAdapter(adapter);
}
private void addItem(){
items.add(new Item());
adapter.notifyDataSetChanged();
}
private class ChildAttachListener implements OnChildAttachStateChangeListener{
LinearLayoutManager llm;
public ChildAttachListener(LinearLayoutManager llm){
super();
this.llm = llm;
}
@Override
public void onChildViewAttachedToWindow(View view) {
System.out.println("Items size = "+items.size() + ", Last Visible Item = "+llm.findLastVisibleItemPosition());
}
@Override
public void onChildViewDetachedFromWindow(View view) {
}
}
添加第一项时返回:
Items size = 1, Last Visible Item = -1
添加第二项时返回:
Items size = 2, Last Visible Item = 0
Items size = 2, Last Visible Item = 0
添加第三项时返回:
Items size = 3, Last Visible Item = 0
Items size = 3, Last Visible Item = 1
Items size = 3, Last Visible Item = 1
在所有情况下,所有项目都是可见的(我可以在屏幕上有7个可见项目)。
有没有人可以帮我理解一下findLastVisibleItemPosition()
的返回值,并建议如何在添加卡片时判断卡片是否在屏幕上可见?
EDIT:我应该澄清一下,我的真正目标是(使用我的addItem()
方法)在添加项目时知道它是否可见。如果在addItem()
方法中有一种简单的方法可以做到这一点,那就更好了。
发布于 2015-11-05 18:39:29
对于那些感兴趣的人,我已经通过在处理程序中调用findLastVisibleItemPosition解决了这个问题:
@Override
public void onChildViewAttachedToWindow(View view) {
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
System.out.println(llm.findLastVisibleItemPosition());
}
});
}
https://stackoverflow.com/questions/33522127
复制相似问题