gpt4 book ai didi

android - 确定项目是否在 RecyclerView 上可见

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:45 26 4
gpt4 key购买 nike

我构建了一个基本界面,该界面由 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() 方法中有一个简单的方法就更好了。

最佳答案

对于那些感兴趣的人,我已经通过在 Handler 中调用 findLastVisibleItemPosition 解决了这个问题:

@Override
public void onChildViewAttachedToWindow(View view) {

Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {

System.out.println(llm.findLastVisibleItemPosition());
}
});
}

关于android - 确定项目是否在 RecyclerView 上可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33522127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com