【发布时间】:2012-03-10 16:51:31
【问题描述】:
我要做的是从 AlertDialog 条目填充 ListView。我曾尝试使用 SharedPreferences 来执行此操作,之前我将最后一个条目保存到 ListView 中(如果我输入了多个字符串),所以当我离开活动并返回列表中出现的所有内容时是我的最后一个进入。
但是我发现了这个问题并修改了保存过程,通过增加附加的 Int 变量来更改存储首选项的“Key”字段。
为了让您全面了解正在发生的事情: 第一篇所以图片在这里:http://imgur.com/yGLQx 这是 ListView 的多个条目的输出。
如果您留在 Activity 中,ListView 会填充来自用户的条目,但是在离开 Activity 并返回到它之后,就像条目已注册,但字符串值尚未保存。
这是我的代码:
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);
}
所以,看看,如果我在做一些荒谬的事情,请告诉我,让我知道!
为帮助干杯!
【问题讨论】:
-
问题也可能与从AlertDialog手动输入
ArrayList listItems有关...
标签: android listview arraylist android-alertdialog sharedpreferences