java - findViewByID 中的变量 - Android Studio - Java
问题描述
我正在使用 Android Studio 编程并尝试编写剪刀石头纸游戏。现在我正在编写一个高分,用户可以在其中看到记录为 10 个元素的列表。
要在此列表中插入玩家的姓名,我在 Textview 中插入值:
TextView tempField = findViewById(R.id.playerName1);
tempField.setText(sharedpreferences.getString("name" + i, ""));
因为这些是 10 个元素,我需要为每个元素插入 3 个值,我想使用 for 循环来执行此操作。问题是我不能只在 R.id.playerName 后面放一个带有数字的变量。我试过了:
for(int i = 0; i < 10; i++){
TextView tempField = findViewById("R.id.playerName" + i);
tempField.setText(sharedpreferences.getString("name" + i, ""));
}
解决方案
您可以创建任何对象的数组,您只需要使用循环遍历数组来分配它们的属性。
为了建立一个例子,让我们看一些事情:
据我了解,您需要为每个设置 3 个不同的值TextView
。我假设您正在寻找类似于X: Name - Score
. 我会使用一个for
循环来设置三个不同的数组,这样你的值是本地的,而且如果你还没有在另一个循环中使用它们,它也可以让你更容易。
之后,我会用这样的东西来设置它:
TextView[] myTextViews = new TextView[10];
for (int tv = 0; tv < 10; tv++){
myTextViews[tv] = new TextView(this);
myTextViews[tv].setText(array1[tv] + ": Name:" + array2[tv] + "- Score:" array3[tv]); //per the format I mentioned above.
parentView.addView(myTextViews[tv]);
}
其中 array1、array2 和 array3 是您在问题中提到的 3 个值。
这样您就可以在每次迭代中初始化每个 TextView 及其属性。你可以把它放在一个方法中,这样你就可以在每次创建新游戏时更新它,等等。
推荐阅读
- django - 如何从上一个错误/失败中恢复 Django 测试套件?
- mysql - 使用 mysqld_safe 运行 MySQL 后如何停止它?
- xml - DTD 语法 - 是否可以指定只能包含属性的元素?
- c# - 如何使同一网络上的 wpf 应用程序从一个 SQL Server 读取数据?
- xcode - 使用终端和 git 时出现 Xcode 错误
- c++ - For 循环集合 - 获取下一个元素迭代器
- r - 无法使用 install_github() 安装 IRkernel:未安装 Git?
- php - 使用 NodeJS 发送 PHP 文件
- python - 使用 SLSQP 的 SciPy 优化提供了不满足约束的解决方案
- vuejs2 - 使用 VueJS 重置 Select2 组件