我有一个非常长的项目列表(超过200个)和一个显示列表的数据库。我有一个点击事件,比较如果第一个项目是“苹果”,那么当你点击它时,事实就出现了一个“苹果”。问题是这个列表不是 SET 列表,这意味着单词“apple”可能位于第一位,也可能位于第18位。
我开始做 if 语句,比较如下:
case 0:
if (text.equals("apple")) {
[show facts about apple]
} else if (text.equals("orange")) {
[show facts about orange]
//this would continue on to compare the ENTIRE LIST (about 500 lines per case)
break;
问题是我收到错误消息:
The code of method onListItemClick(ListView, View, int, long) is exceeding the 65535 bytes limit
必须有一种更简单的方法来做到这一点,对吧?
答案 0 :(得分:2)
您可以将事实放在数据库中,并使用项对表进行索引。然后,数据库将评估您的if
。它看起来像select fact from facts where item='apple'
。可能有帮助吗?也可以轻松添加,删除或更改信息。此外,借助数据库索引,查找(if
- 评估)非常快。
答案 1 :(得分:0)
首先,要解决你的“方法太久”问题,有几种方法。
#1将您的所有描述移至strings.xml。
if (text.equals("apple")) {
result = getResources().getString(R.string.apple_description);
}
#2将您的if-else移动到单独的方法中。
case 0:
mydescription = getDescription(text); // getDescription() is the big if-else you have
但是......以这种方式进行编码仍然是非常糟糕。
请考虑以下事项:
#1为名称和说明创建一个HashMap。
#2在列表适配器中,将标记设置为指示符。
view.setTag("apple");
#3在您的onListItemClick中,阅读此标记并获取说明。
String text = view.getTag();
String description = myhashmap.get(text).toString();
// If your hashmap is mapping name and string resource id then:
String description = getResources().getString(Integer.parseInt(myhashmap.get(text)));