2015-10-07 49 views
1

所以我在我的主要活動有一定共享偏好:獲取共享偏好,並在列表視圖中顯示它們

SharedPreferences prefs = this.getSharedPreferences("myFavs", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = prefs.edit(); 

我添加一些生成的字符串作爲一個鍵值對:

editor.putString(saved,saved); 
editor.apply(); 

在我希望能夠將我在共享首選項文件中保存的所有鍵值對顯示到ListView中。

我曾經用過的東西,如:

ListView listView = (ListView) findViewById(R.id.favsList); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.listlayout, android.R.id.text1, values); 
    listView.setAdapter(adapter); 

之前,但我不知道如何讓我的所有共享偏好到,我可以放進一個ListView的格式。

P.S我應該提到我只是真的需要一個鍵或值的列表作爲鍵和值總是相同的。

我想這可能是解決我的問題:

SharedPreferences prefs = getSharedPreferences("myFavs", 0); 
    Map<String, String> m = (Map<String, String>) prefs.getAll(); 
    List<String> list = new ArrayList<>(m.values()); 

這是正確的嗎?

+2

你有沒有試過'SharedPreferences .getAll()' – Emil

+0

你需要用Log逐行檢查它。它會幫助你 – iroiroys

回答

2

如果我的理解正確,您需要的是檢索所有首選項值。

因爲你可以使用它;

Map<String,?> allPrefs = prefs.getAll();  
    for(Map.Entry<String,?> entry : allPrefs.entrySet()){ 
     String key = entry.getKey(); 
     String value = entry.getValue().toString(); 
    } 

您可以將值存儲到數組中並使用。

UPDATE

更精確地

public String[] fetchAllPreference(){ 
    String[] values = new String(); 
    int index = 0; 
    Map<String,?> allPrefs = prefs.getAll();  

    for(Map.Entry<String,?> entry : allPrefs.entrySet()){ 
     value[index++] = entry.getValue().toString(); 
    } 
    return values; 
    } 

您可以使用此功能讓所有的偏好和返回的字符串數組,你可以提供給您的列表視圖適配器

+0

我開始使用'SharedPreferences prefs = getSharedPreferences(「myFavs」,0);','Map m =(Map )prefs.getAll();','List list = new ArrayList <>(m.values());'我認爲這與您所放的內容相似? – James

+0

我不明白,你能解釋一下嗎? – droidev

+0

我編輯的問題 – James