2017-02-14 64 views
0

我已經能夠將一個條目保存到共享首選項,並且能夠在另一個視圖的列表視圖中顯示,但我希望添加多個條目並將它們也顯示在列表視圖中。我以爲我有正確的代碼,但它沒有看到任何改變。我的意圖是收藏夾列表,我從一個視圖中獲取條目數據並在另一個視圖中顯示它。如何將字符串集保存到共享首選項

SingleView活動:

SharedPreferences.Editor fd; 
SharedPreferences FeedPref; 

private ArrayList<String> addArray = new ArrayList<>(); 

    txt = (TextView) findViewById(R.id.name); 

    add = (Button) findViewById(R.id.btnAdd); 
    FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    fd = FeedPref.edit(); 


    add.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      String message = txt.getText().toString(); 

      if (addArray.contains(message)) { 
       Toast.makeText((getBaseContext()), "Plant Already Added", Toast.LENGTH_LONG).show(); 
      } else { 
       addArray.add(message); 

       FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
       fd = FeedPref.edit(); 
       fd.putInt("array_size", addArray.size()); 

       for (int i = 0; i < addArray.size(); i++) { 
        fd.putString("Status_" + i, addArray.get(i)); 
       } 
        fd.commit(); 
        Toast.makeText((getBaseContext()), "Plant Added", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
    } 

mygarden活性:

public class mygardenMain extends Activity { 
//String[] presidents; 
ListView listView; 
//ArrayAdapter<String> adapter; 
SharedPreferences FeedPref; 
SharedPreferences.Editor fd; 
//private ArrayList<String> addArray; 
//public static final String PREFS = "examplePrefs"; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mygarden_list); 
    listView = (ListView) findViewById(R.id.mygardenlist); 
    //addArray = new ArrayList<>(); 

    FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

    int size = FeedPref.getInt("array_size", 0); 

    for (int i = 0; i < size; i++) { 
     String mess = FeedPref.getString("Status_" + i, null); 
     String[] values = new String[]{mess}; 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values); 
     listView.setAdapter(adapter); 

    } 
} 
+0

fd.commit();只要你把字符串,就會被調用。而這並不是理想的做法。 –

+0

爲什麼不保存一個集合,我認爲它會更清晰,看看這篇文章:http://stackoverflow.com/questions/7057845/save-arraylist-to-sharedpreferences,比onclick事件,你應該得到從共享偏好設置,添加新項目並保存。 – fdam

+0

這是我用來從我到達今天的代碼的線程。 – user4682589

回答

0

SingleView活動:

SharedPreferences.Editor fd; 
    SharedPreferences FeedPref; 

    private ArrayList<String> addArray = new ArrayList<>(); 

     txt = (TextView) findViewById(R.id.name); 

     add = (Button) findViewById(R.id.btnAdd); 
     FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
     fd = FeedPref.edit(); 


     add.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       String message = txt.getText().toString(); 

       if (addArray.contains(message)) { 
        Toast.makeText((getBaseContext()), "Plant Already Added", Toast.LENGTH_LONG).show(); 
       } else { 

        FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
        fd = FeedPref.edit(); 

        Gson gson = new Gson(); 
        String jsonText = Prefs.getString("key", ""); 
        if(!jsonText.equals("")) 
        { 
         String[] text = gson.fromJson(jsonText, String[].class); //EDIT: gso to gson 
         if(text.length>0) 
         { 
          //addArray = Arrays.asList(text); 
          //addArray = new ArrayList(addArray); 
          List<String> addArrayNew = Arrays.asList(text); 
          addArray = new ArrayList(addArrayNew); 

         } 
        } 
        addArray.add(message); 

        gson = new Gson(); 
        jsonText = gson.toJson(addArray); 
        prefsEditor.putString("key", jsonText); 
        prefsEditor.commit(); 
       } 
      }); 
     } 

mygarden活性:

public class mygardenMain extends Activity { 
    //String[] presidents; 
    ListView listView; 
    //ArrayAdapter<String> adapter; 
    SharedPreferences FeedPref; 
    SharedPreferences.Editor fd; 
    //private ArrayList<String> addArray; 
    //public static final String PREFS = "examplePrefs"; 
    String jsonText; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mygarden_list); 
     listView = (ListView) findViewById(R.id.mygardenlist); 
     //addArray = new ArrayList<>(); 

     FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

     int size = FeedPref.getInt("array_size", 0); 

     Gson gson = new Gson(); 
     jsonText = FeedPref.getString("key", ""); 
     if(!jsonText.equals("")) 
     { 
      String[] values= gson.fromJson(jsonText, String[].class); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values); 
      listView.setAdapter(adapter); 
     } 

    } 
+0

我得到一個與.addAll(數據)錯誤;它如何知道要輸入的字符串?其顯示數據爲紅色。 – user4682589

+0

也得到一個需要在jsonText部分聲明最終錯誤 – user4682589

+0

你已經在addArray中有數據,所以刪除行addArray .addAll(data); 並聲明字符串jsonText上面創建,然後用onclick – user2025187

0

Set abc = new HashSet <>();

abc.add(「john」);

abc.add(「test」);

abc.add(「again」);

SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPref.edit(); 

    editor.putStringSet("key",abc); 

    editor.commit();