2013-03-09 50 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 /,这样可以减少手机内存。