1

我有一个非常长的项目列表(超过 200 个)和一个显示该列表的数据库。我有一个点击事件,它将比较如果第一个项目是“苹果”,那么当你点击它时,就会出现关于“苹果”的事实。问题是这个列表不是一个SET列表,这意味着“苹果”这个词可能在第 1 位,也可能在第 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

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

4

2 回答 2

2

您可以将事实放在数据库中并使用这些项目来索引表。然后,您if将由数据库评估。它看起来像select fact from facts where item='apple'。这可能有帮助吗?还可以轻松地添加、删除或更改信息。if此外,借助数据库索引,查找( -评估)非常快。

于 2013-02-04T08:30:14.630 回答
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)));
于 2013-02-04T08:57:58.590 回答