我已经构建了一个基本界面,其中包括在RecyclerView
内的CardView
列表。当添加一个卡片时,我需要知道它是否在屏幕上可见。
为了实现这一点,我尝试使用布局管理器的findLastVisibleItemPosition()
方法,但是它似乎返回的结果比预期少一个项目。例如,如果我有1张卡片是可见的,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()
的返回值,并建议我如何确定添加卡片时它是否在屏幕上可见?编辑: 我应该澄清我的真正目标是在添加项目时(使用我的
addItem()
方法),知道它是否可见。如果在addItem()
方法内部有一种简单的方法来实现这一点,那就更好了。