2011-10-28 55 views
0

我有一個AutoCompleteTextView,它與城市列表一起工作。 該列表很長,所以我在考慮在何處/如何/如何存儲和/或緩存它。我應該在哪裏存儲一個TextView數據源

我最初的想法是從我的Web服務獲取列表,但它是一個包含1500多行的長列表。

我應該從每個請求的Web服務中獲取它嗎?獲取一次並緩存它?將它存儲在strings.xml中,以確保最新的列表? (反正它並沒有太大變化)。

我是一般的Android和移動編程新手。任何想法都歡迎。

回答

1

由於它們不會經常更改(創建新引用的次數是多少次?)建議您將它們存儲爲字符串資源。

<string-array name="cities"> 
<item>One</> 
<item>Two</> 
<item>Three</> 
</string-array> 

您可以

getResources().getStringArray(R.array.cities); 
+0

感謝您的答覆!有什麼辦法讓這個列表和AutoCompleteTextView有兩列,一個是可見的,一個是關鍵的?這將使其更容易地提交給Web服務。 –

+0

如果你想添加額外的數據到不會顯示的'ListView',你可以使用'setTag()'和'getTag()'方法,但我建議你跟蹤選定的項目,字符串數組,使用ListView中選定行的'rowId' –

1

如果它不會更改,請將其存儲在strings.xml中。如果它將發生變化,獲取它,緩存它,並在需要時進行更新。我會建議緩存在SQL數據庫中。然後你可以使用遊標,並且有一大堆類似遊標的遊戲。

1

的好地方隨時檢索列表保持列表是SharedSettings。應用程序初始化時,請與Web應用程序一起檢查新列表,並根據需要進行更新。然後保存對ShareSettings字符串的響應。 這裏是如何做到這一點,如果你的名單是由「|」分隔的例子酒吧符號:

autocomplete_list = new ArrayList<String>(); 
     SharedPreferences settings = getSharedPreferences("application_preferences", MODE_WORLD_WRITEABLE); 
     String autocomplete_string = settings.getString("autocomplete_player_names", getResources().getString(R.string.add_players_default_autocomplete)); 
     String[] array = autocomplete_string.split("\\|"); 
     for (int i = 0; i < array.length; i++) { 
      String string = array[i]; 
      autocomplete_list.add(string); 
     } 

,你可以將它應用到編輯文本,像這樣:

final AutoCompleteTextView input = new AutoCompleteTextView(this); 
     String[] array = new String[autocomplete_list.size()]; 
     autocomplete_list.toArray(array); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, array); 
     input.setAdapter(adapter); 
相關問題