使用特定的HashMap值来设置特定TextView的setText()

时间:2014-06-16 15:45:55

标签: android hashmap textview

在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资源?

如果这令人困惑,我道歉。如果有帮助,我可以发布代码,但我尽量保持它的通用性。

提前致谢:)

3 个答案:

答案 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());
}