我创建了一个RecyclerView
包含动态EditText
字段的。编辑字段中的值时,EditText
我需要单击按钮保存它们。我recyclerView.getChildCount()
用来获取每次都给出不同数字的孩子计数。
6 回答
RecyclerView 执行其名称所指示的操作。它回收视图。假设您有一个包含 1000 个条目的列表,但在任何给定时间,屏幕上都会显示 3-4 个条目。RecyclerView 的适配器始终保存所有这些子项,因此调用recyclerView.getAdapter().getItemCount();
将返回 1000。
但是 RecyclerView 只保存一些显示的项目并且“接近”显示,因此recyclerView.getChildCount()
将返回一个较小且不恒定的值。对于大多数应用程序,您应该使用适配器提供的方法。
RecyclerView 的孩子是指行数?
然后我建议调用适配器的方法。称呼:
recyclerView.getAdapter().getItemCount();
我想您正在使用 LinearLayoutManager 来显示列表。它有一个名为 findViewByPosition 的好方法
发布问题比较晚。不要认为答案正确地解决了问题。几年前报告了“报告显示的可见项目下的 getChildCount”问题,但我的研究发现没有人指出在某些情况下导致此问题浮出水面的原因。
我最近遇到了同样的问题,这导致我进一步调查。这是我的发现。
假设 RecyclerView 上的 9 个项目是否可见。调用 getChildCount()。它应该返回 9,可能会少/多 1 或 2,具体取决于顶部和底部的部分可见项目。这将是大多数时间的结果......直到软键盘显示一些 TextEdit 输入。如果在导致显示键盘的方法调用之后大约 500 毫秒调用 getChildCount(),结果将小于 9。它将是不受键盘视图阻碍的项目的计数。奇怪的是,即使用户没有更改 RecyclerView 的显示内容。奇怪的是,即使在关闭键盘之后,所有 9 个项目都再次可见,调用 getChildCount() 仍然会返回不正确的计数不足!这发生在 Android 11 上,大概是 11 之前的版本(没有在 11 之后的版本中测试)。
解决这个问题的一个线索是 RecyclerView.postInvalidateDelayed 方法。如果您确实需要使用正确的 getChildCount 数字,请执行以下操作(在键盘关闭后):
myRecyclerView.invalidate();
myRecyclerView.postDelayed(myRunnable, 200);
微妙的问题!
Google 的 Android 人员 .. 请注意并解决此错误。
有一个名为getItemCount()
in的方法LayoutManager
,它准确地返回您需要的内容。基本上它做了其他答案中建议的事情。
嘿,如果我正确理解了您的问题,您正在尝试在单击按钮时检索 EditText 中的值。如果您想从所有可见的视图持有者中检索,请执行此操作
View v;
int itemCount = recyclerview.getChildCount();
for(int i = 0; i < itemCount; i++){
v = recyclerview.getChildAt(i); /* assuming you have your EditText in a view group like LinearLayout*/
EditText et = v.findViewById(R.id.my_text);
String text = et.getText().toString()
// todo process text
}