Я пытаюсь обновить свой ListView, когда onSharedPreferenceChanged. Я попробовал следующее, но это не работает:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
if(!firstRun)
{
list.clear();
populateList();
}
firstRun = false;
}
Проблема в том, что я не знаю, какой они ключ данных, который изменился, поскольку это может быть одна из 7 различных строк данных. Вот Активность со списком, который я хочу обновить:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
userInfo = this.getSharedPreferences(USERINFO_FILE, 0);
userInfo.registerOnSharedPreferenceChangeListener(this);
userControl = new UserController(context);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
list = new ArrayList<HashMap<String,String>>();
callForwardList = new SimpleAdapter(
this,
list,
R.layout.callforward_items,
new String[] { "line1","line2" },
new int[] { R.id.callforward_item_text, R.id.callforward_number } );
new PullInfoTask().execute();
setListAdapter( callForwardList );
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
switch(position)
{
case 0:
customDialogOnAlways();
break;
case 1:
customDialogOnBusy();
break;
case 2:
customDialogOnNoAnswer();
break;
}
}
});
}
РЕДАКТИРОВАТЬ Код для populateList
private void populateList()
{
cfinfo = userControl.GetCallForwardInfo();
if(Integer.parseInt( cfinfo[0]) == 1)
addItem("Viderestilling altid", cfinfo[1]);
else
addItem("Viderestilling altid", "Slået fra");
if(Integer.parseInt(cfinfo[2]) == 1)
addItem("Viderestilling ved optaget", cfinfo[3]);
else
addItem("Viderestilling ved optaget", "Slået fra");
if(Integer.parseInt(cfinfo[4]) == 1)
addItem("Viderestilling ved intet svar", cfinfo[5]);
else
addItem("Viderestilling ved intet svar","Slået fra");
callForwardList.notifyDataSetChanged();
}
private void addItem(String label, String number)
{
HashMap<String,String> item = new HashMap<String,String>();
item.put( "line1", label );
item.put( "line2", number );
list.add( item );
}