android - 为什么在 RecyclerView findViewByPosition() 在 EditText 上返回 null
问题描述
我有一个Activity
,其中有一个RecyclerView
和保存Button
。的每个项目(足球比赛)都RecyclerView
包含一些文本(球队名称)和EditText
,用户在其中输入数据(实际上是投注比赛)。Activity
我的目标是在用户单击保存时将这些分数保存到列表中Button
。
我在 中实现了这个方法Activity
,它实际上从 中获取特定项目LinearLayoutManager
,然后从中获取数据EditText
,但是该findViewByPosition()
方法(或 getChildAt() 有不同的方法来执行此操作)有时会返回 null。
我在类似问题上看到了另一个答案,但他们没有帮助我。也许我的策略是错误的,因为我在 Activity 中完成了我的逻辑(最好在 Adapter 中执行此操作?)并且RecyclerView
即使只有一个用户输入了分数,我也可以通过我的所有项目。
private List<Bet> getUserBets() {
View betView;
Bet betItem;
EditText userBet1;
EditText userBet2;
int numberOfMatches = rvBetsAdapter.getItemCount();
List<Bet> bets = new ArrayList<>();
for (int i = 0; i < numberOfMatches; i++)
{
betItem = rvBetsAdapter.getItem(i);
betView = linearLayoutManager.findViewByPosition(i);
userScore1 = (EditText) betView.findViewById(R.id.result1); // <- NPE appears
userScore2 = (EditText) betView.findViewById(R.id.result2);
//here i checked whether the editText is empty and other stuff
bets.add(betItem);
}
return bets;
}
我如何解决它?我想我应该在我的适配器的 onBindViewHolder 方法中做一些事情,但究竟是什么?我真的很感激任何帮助。
解决方案
您应该添加到您的Bet
模型变量中EditText
,例如保存值editTextValue
。
并使用适配器列表中的列表访问它,就像EditText
从那里的最终使用值一样。rvBetsAdapter.getItem(i).editTextValue
editTextValue
可以使用TextWatcher.afterTextChanged()
回调设置
推荐阅读
- html - 悬停时按钮下方出现奇怪的线条
- javascript - 单击某些文本JS更改图像
- ejabberd - 在 ejabberd 中启用 XML-RPC 还需要做什么?
- laravel - 为 nuxt app + nuxt admin + api 设置 docker
- javascript - 反应中的完整日历在标题元素上添加点击事件
- python - 检测圆的完美周长
- java - 为特定于客户端的邮件模板创建动态 Sql 查询
- javascript - 我们如何通过 npm 安装 fontawesome?
- ruby-on-rails - 未添加 RailsAdmin 所需的中间件 (RuntimeError)
- networking - 如何通过它找到打开的端口和隧道流量以绕过防火墙