使用键集填充ListView

时间:2016-11-22 21:14:26

标签: java android listview sharedpreferences

我是Android和Java的新手,但我一直尝试这样做一段时间并且有一些想法如何工作,但我不知道如何把它放在代码中。

我有两个活动,一个是Log,另一个是创建新日志。基本上,当用户创建新日志并将其保存时,它将保存为键集,其中键为日志名称。

然后我想获取新创建的Log条目并将其添加到另一个Activity上的列表中。

我似乎只能使用所有KeySet填充列表中的第一个项目,而不是通过添加为新项目逐个列出它们。

我需要的代码就是将ListView中的每个项目填充为KeySet中的一个Key,当用户点击它时,它会加载值。

我在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
    }


}

感谢您提供任何改进此代码的帮助或建议。

1 个答案:

答案 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);
}