1

非常に長いアイテムのリスト(200以上)と、リストを表示するデータベースがあります。最初のアイテムが「リンゴ」の場合、それをクリックすると「リンゴ」に関する事実が表示されることを比較するオンクリックイベントがあります。問題は、このリストがSETリストではないことです。つまり、「apple」という単語が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-evaluation)が非常に高速になります。

于 2013-02-04T08:30:14.630 に答える
0

まず、「メソッドが長すぎる」問題を解決するには、いくつかの方法があります。

#1すべての説明をstrings.xmlに移動します。

if (text.equals("apple")) {
    result = getResources().getString(R.string.apple_description);
}

#2if-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)));
于 2013-02-04T08:57:58.590 に答える