是否有更简单的方法来比较大量的项目?

时间:2013-02-04 07:58:33

标签: android android-sdk-tools

我有一个非常长的项目列表(超过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

必须有一种更简单的方法来做到这一点,对吧?

2 个答案:

答案 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。

  • Apple - Apple的描述
  • 橙色 - 橙色描述

#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)));