在Android应用中,我有各种TextView
个实例,其ID类似于:android:id="@+id/a_key
其中a_key
是一个没有数字值的单词。
Java类(非活动)解析外部XML文件并填充这样的Map:
HashMap<String, String> map = new HashMap<String, String>;
map.put(a_key, a_value);
字符串a_key
包含完全相同的android:id="@id/a_key"
字词。
我如何继续将a_value
分配给ID由字符串android:text
表示的a_key
资源?
如果这令人困惑,我道歉。如果有帮助,我可以发布代码,但我尽量保持它的通用性。
提前致谢:)
答案 0 :(得分:0)
好吧,id
转换为integer
并在编译时丢失到系统。所以这不是方法。最好的办法是在每个text view
上使用标记:android:tag="a_key"
。然后,当您想要设置视图的文本时,使用getTag
获取标记,并将其传递到哈希映射中以获取关联的字符串。
答案 1 :(得分:0)
您说您的HashMap不在Activity中,但除非您在Activity中,否则您无法为TextView设置文本。因此,我们假设您的HashMap可以从该类获得。以下内容适用于您的活动:
TextView testTextView = (TextView) findViewById(R.id.testTextView);
HashMap<String, String> map = otherClassInstance.getMap();
testTextView.setText(map.get("testTextView"));
这里的脆弱性在于,如果您重构ID,您还需要记住将调用中的硬编码文本更改为setText()
。因此,Gabe的解决方案可能更适合您的情况。
答案 2 :(得分:0)
更好的方法是使用codeMagic建议的方式。
使用
int id = getResources().getIdentifier("a_key", "id", "com.example.app");
然后当然使用
Textview a_textView = findViewById(id);
您需要遍历地图的条目集以此方式执行,因此请使用
map.entrySet()
前:
for(Entry<String, String> entry : map.entrySet())
{
int id = getResources().getIdentifier(entry.getKey(), "id", "com.example.app");
TextView textView = findViewById(id);
textView.setText(entry.getValue());
}