2016-11-22 52 views
0

我是新來的Android和Java,但我一直在努力,現在一會做到這一點,有一些想法,這可能如何制定一個ListView,但我不知道如何把它的代碼。填充用的密鑰集

我有兩個活動,一個是一個日誌,一個創建一個新的日誌。基本上,當一個用戶創建一個新日誌並保存它時,它將被保存爲一個密鑰集,密鑰是日誌名稱。

然後我想要將新創建的日誌條目添加到另一個活動的列表中。

我只能似乎所有的按鍵組,而不是他們來填充列表中的第一項被添加爲新的項目逐一列出。

我需要的代碼只是爲了在ListView每個項目填充作爲的KeySet的關鍵之一,當用戶點擊它加載的值。

的代碼,我從ActivityLog有:

public void loadLog (View view){ 

SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = userInfo.edit(); 
    String myString = userInfo.getAll().keySet().toString(); 
    String[] values = new String[] { myString 
    }; 


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item, android.R.id.text1); 


    Map<String, ?> allEntries = userInfo.getAll(); 
    for (Map.Entry<String, ?> entry : allEntries.entrySet()) { 

     Log.d("map values", entry.getKey() + ": " + entry.getValue().toString()); 
     listView.setAdapter(adapter); 

    }} 

代碼ActivityNewLog:

public void saveLog (View view){ 


    EditText Date = (EditText)findViewById(R.id.editDate); 
    EditText Name = (EditText)findViewById(R.id.editName); 
    EditText Cal = (EditText)findViewById(R.id.editCal); 
    EditText STime = (EditText)findViewById(R.id.editSTime); 
    EditText ETime = (EditText)findViewById(R.id.editETime); 
    EditText Entry = (EditText)findViewById(R.id.editEntry); 

    try { 
     SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = userInfo.edit(); 
     Set<String> LogSet = new HashSet<String>(); 

     LogSet.add(Date.getText().toString()); 
     LogSet.add(Name.getText().toString()); 
     LogSet.add(Cal.getText().toString()); 
     LogSet.add(STime.getText().toString()); 
     LogSet.add(ETime.getText().toString()); 
     editor.putStringSet(Entry.getText().toString(), LogSet); 
     editor.commit(); 
     Context context = getApplicationContext(); 
     CharSequence text = "User data saved!"; 
     int duration = Toast.LENGTH_LONG; 
     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 


    } 
    catch(Exception ex) { 
     // insert your own error message here 
    } 


} 

我將不勝感激任何幫助或建議,以改善該代碼。

+0

爲什麼你需要'Set'而不是'List'? –

+0

我使用了集合,因爲每個集合都保存新日誌屏幕的值,例如日期,名稱,時間等,我需要稍後訪問它們,並且我只是假定集合是最佳選項。 –

回答

0

我會建議你使用SQLite數據庫,而不是在這裏你把一個關鍵到SharedPreferences/HashMap

editor.putStringSet(Entry.getText().toString(), LogSet); 

現在,你必須得到該值回來了......

Map<String, ?> allEntries = userInfo.getAll(); 
Set<String> entry = allEntries.get("<some value here>"); // <-- Whatever you put in 

而當你有,你可以遍歷他們添加到適配器。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item, android.R.id.text1); 
listView.setAdapter(adapter); 

for (String s : entry) { 
    adapter.add(s); 
} 
+0

發佈後這個我用了一個非常類似於此方法,但以不同的方式結構化的方法,它的工作原理非常感謝,因爲這是完美的 –

+0

很高興聽到。您可以通過[接受答案](http://stackoverflow.com/help/someone-answers)顯示您的感謝,或發佈您自己的解決方案 –