2017-02-14 7 views
0

共有環境設定に1つのエントリを保存し、別のビューのリストビューに表示することができましたが、複数のエントリを追加してリストビューに表示したい。私は正しいコードを持っていると思ったが、何も変えていないと思う。私の意図はお気に入りのリストです。私は1つのビューからエントリデータを取り出し、別のビューに表示します。文字列セットを共有環境設定に保存する方法

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(data)でエラーが発生しました。入力する文字列をどのように知っていますか?そのデータを赤で表示します。 – user4682589

+0

また、jsonTextパーツの最終エラーを宣言する必要がある – user4682589

+0

既にaddArrayにデータがあるので、addArray行を削除してください。addAll(data); 作成時に上記のString jsonTextを宣言し、onclickで使用する – user2025187

0

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(); 
関連する問題