2013-03-09 48 views
1

我想創建一個使用共享首選項數據的列表視圖,每次我要添加一個數據來重新填充listivew,但它只能得到最近輸入的數據,所以顯示在列表視圖往往有1 row only every time共享首選項來創建一個列表視圖

代碼片斷:

String strSavedMem1 = sharedPreferences.getString("food", ""); 
String[] values = new String[] { strSavedMem1 }; //That you got from your intent bundle 
LVAdapter adapter = new LVAdapter(this, R.layout.foodlist, values); 
setListAdapter(adapter); 

LVAdapter.java

public class LVAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public LVAdapter(Context context, int foodlist, String[] values) { 
    super(context, R.layout.foodlist, values); 
    this.context = context; 
    this.values = values; 
    } 


@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.foodlist, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.foods);   
    textView.setText(values[position]);  
    return rowView; 
    } 
} 

代碼來存儲在共享偏好值。

String item_content1 = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_FOODNAME)); 
    food.setText(item_content1); 

    SavePreferences("food", food.getText().toString()); 
    LoadPreferences(); 

     }}; 

    protected void SavePreferences(String key, String value) { 
     // TODO Auto-generated method stub 
     SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value); 
     editor.commit(); 

    } 
    protected void LoadPreferences() { 
     // TODO Auto-generated method stub 
     SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE); 
     String strSavedMem1 = sharedPreferences.getString("food", ""); 
     food.setText(strSavedMem1); 

    } 

我必須在上面的代碼中進行更改,才能從共享偏好中獲取整個數據?

回答

1

你的String[] values = new String[] { strSavedMem1 }總是有一個元素。嘗試找到更多的元素添加到你的數組中。

我假設你有你的sharedpreferences多個元素

String strSavedMem1 = sharedPreferences.getString("food1", ""); 
String strSavedMem2 = sharedPreferences.getString("food2", ""); 
String strSavedMem3 = sharedPreferences.getString("food3", ""); 

String[] values = new String[] { strSavedMem1, strSavedMem2 ,strSavedMem3} 
+0

那是我不知道要做什麼?我需要一個循環對這個或其他東西的condtition嗎? – 2013-03-09 04:46:36

+0

@ michelle.mo你不能在這裏做一個循環。但是我認爲你知道共享首選內部的密鑰的名稱。所以你可以給我打電話,比如我在我的帖子 – 2013-03-09 04:49:16

+3

其實,如果你的關鍵模式是相同的('「food [x]」'),那麼你可以做一個循環。而不是使用數組,請使用ArrayList。另外,看看使用數據庫,它更清潔。 – 2013-03-09 04:52:12

1

好心使用的應用程序相關的設定共享偏好,同時也避免存放在共享偏好的共享Preferences.The物理路徑大數據列表 /data/data/YOUR_PACKAGE_NAME /,這樣可以減少手機內存。