Что я хочу сделать, это заполнить ListView из записи AlertDialog. Я пытался сделать это с SharedPreferences, ранее у меня была последняя запись, просто сохраняемая в ListView (если я ввел более одной строки), поэтому, когда я покинул действие и возвратил все, что появилось в списке, было моим последним запись.
Однако я решил эту проблему и изменил процедуру сохранения, чтобы изменить поле «Ключ» сохраненного предпочтения, увеличивая присоединенную переменную Int.
Чтобы дать вам полную картину происходящего:
Первый пост, так что рис здесь: http://imgur.com/yGLQx
Это вывод нескольких записей в ListView.
Если вы остаетесь в Деятельности, ListView заполняется записями от пользователя, однако после выхода из операции и возврата к ней, как и записи, они были зарегистрированы, но значения String не были сохранены.
Вот мой код:
public class ManageLinguisticPhrases extends ListActivity {
private static final String PHRASE = "Phrase_";
private SharedPreferences prefs;
private String prefName = "myPhrasesStorage";
ArrayList <String> listItems = new ArrayList <String>();
ArrayAdapter <String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1, listItems);
setListAdapter(adapter);
prefs = getSharedPreferences(prefName, MODE_PRIVATE);
LinkedList<String> phrasesCollection = new LinkedList<String>();
int phraseCount = prefs.getInt("phrase_count", 0);
for(int i = 1; i <= phraseCount; i++) {
phrasesCollection.add(prefs.getString(PHRASE + i, "<< Enter a phrase >>"));
}
listItems.addAll(phrasesCollection);
adapter.notifyDataSetChanged();
}
@Override
protected Dialog onCreateDialog(int id)
{
final EditText input = new EditText(this);
final String text = input.getText().toString();
switch (id)
{
case 0:
return new AlertDialog.Builder(this)
.setIcon(R.drawable.ic_launcher)
.setTitle("Please enter the new data")
.setView(input)
.setPositiveButton("Save", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
listItems.add(input.getText().toString());
adapter.notifyDataSetChanged();
prefs = getSharedPreferences(prefName, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
//increments index by 1
editor.putInt("phrase_count", prefs.getInt("phrase_count", 0) + 1);
//save new phrase in myPhrasesStorage with key "name[index]"
editor.putString(PHRASE + (prefs.getInt("phrase_count", 0) + 1), text);
editor.commit();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
}
})
.create();
}
return null;
}
private void CreateMenu(Menu menu)
{
MenuItem mnu1 = menu.add(0, 0, 0, "Add data");
{
mnu1.setAlphabeticShortcut('a');
mnu1.setIcon(android.R.drawable.ic_menu_add);
}
MenuItem mnu2 = menu.add(0, 1, 1, "Edit data");
{
mnu2.setAlphabeticShortcut('b');
mnu2.setIcon(android.R.drawable.ic_menu_edit);
}
MenuItem mnu3 = menu.add(0, 2, 2, "Delete data");
{
mnu3.setAlphabeticShortcut('c');
mnu3.setIcon(android.R.drawable.ic_menu_delete);
}
}
private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId())
{
case 0:
showDialog(0);
return true;
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return MenuChoice(item);
}
Так что да, посмотрите, скажите мне, если я делаю что-то нелепое, и дайте мне знать!
Приветствия за помощь!