显示从编辑文本到文本视图的实时结果



我正在创建一个包含记分卡的小型高尔夫应用程序。我正面临着一个问题,显示用户的现场得分在一个文本视图。实时得分由他们在洞(标准杆)的得分组成。我在for循环中使用editText.setOnEditorActionListener,目的是它将继续做减法,直到输入所有分数。

到目前为止,在输入一个分数后部分起作用。我所说的部分是指它只会显示用户第一次输入的分数,如果我在另一个洞中添加分数,它只会再次添加第一个分数,而忽略用户的任何其他输入。我希望尝试双向数据绑定,但失败了。如果没有足够的上下文,我很乐意发布丢失的内容,或者很乐意接受有关正确数据绑定实现的指导。

代码

List<EditText> userScores = new ArrayList<>();
userScores.add(etUserHole1);
userScores.add(etUserHole2);
userScores.add(etUserHole3);
userScores.add(etUserHole4);
userScores.add(etUserHole5);
userScores.add(etUserHole6);
userScores.add(etUserHole7);
userScores.add(etUserHole8);
userScores.add(etUserHole9);
List<Integer> coursePars = new ArrayList<>();
coursePars.add(Integer.parseInt(tvPar1.getText().toString()));
coursePars.add(Integer.parseInt(tvPar2.getText().toString()));
coursePars.add(Integer.parseInt(tvPar3.getText().toString()));
coursePars.add(Integer.parseInt(tvPar4.getText().toString()));
coursePars.add(Integer.parseInt(tvPar5.getText().toString()));
coursePars.add(Integer.parseInt(tvPar6.getText().toString()));
coursePars.add(Integer.parseInt(tvPar7.getText().toString()));
coursePars.add(Integer.parseInt(tvPar8.getText().toString()));
coursePars.add(Integer.parseInt(tvPar9.getText().toString()));
for (int i = 0; i < userScores.size(); i++) {
userScores.get(i).setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
int j = 0;
if (actionId == j) {
userSumOfHoles += Integer.parseInt(userScores.get(j).getText().toString()) - coursePars.get(j);
tvCurrentScoreUser.setText(String.valueOf(userSumOfHoles));
j++;
return true;
}
else {
return false;
}
}
});
}

这是一个不完整的答案,旨在给你一些想法来最终确定你的方法。

onEditorAction回调中的这一行:

userSumOfHoles += Integer.parseInt(userScores.get(j).getText().toString()) - coursePars.get(j);

可以替换为:

userSumOfHoles += Integer.parseInt(v.getText().toString()) - holeParRating;

没有必要为EditText/TextView索引userScores,因为你在回调中提供了它:v。需要明确的是:当调用回调时,为了方便,系统提供原始的EditText/TextView实例。因此,理论上,您可以只使用一个侦听器进行所有处理。

现在更复杂的部分是如何"查找";这个洞的标准杆数。它可能有可能(我没有测试过)使用TextView作为键来查找userScores列表中视图的indexOf,并使用相同的索引来获取coursePars列表中的par -因为您将它们填充为相关的。

:这假设TextView的equals方法在这种情况下足以进行查找。

holeParRating = coursePars.get(userScores.indexOf(v));

所以整个监听器代码:

int userScoresIdx = userScores.indexOf(v);
if (userScoresIdx >= 0) {
// log info for userScoresIdx to verify it properly finds proper index
holeParRating = coursePars.get(userScoresIdx);
userSumOfHoles += Integer.parseInt(v.getText().toString()) - holeParRating;
tvCurrentScoreUser.setText(String.valueOf(userSumOfHoles));
} else {
// log an error for debugging
}

并消除j变量,因为它没有被正确使用。

我也假设actionId与你的处理无关,因为它没有被提及作为一个问题。

相关内容

  • 没有找到相关文章