Android 在共享首选项上更新ListView已更改
当OnSharedPreferences更改时,我正在尝试更新我的ListView。我尝试了以下方法,但无效:Android 在共享首选项上更新ListView已更改,android,listview,sharedpreferences,Android,Listview,Sharedpreferences,当OnSharedPreferences更改时,我正在尝试更新我的ListView。我尝试了以下方法,但无效: public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if(!firstRun) { list.clear(); populateList(); } firstRun = false; }
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;
}
}
});
}
@覆盖
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
userInfo=this.getSharedReferences(userInfo_文件,0);
userInfo.RegisterOnSharedReferenceChangeListener(此);
userControl=新的UserController(上下文);
ListView lv=getListView();
lv.setTextFilterEnabled(真);
列表=新的ArrayList();
callForwardList=新的SimpleAdapter(
这
列表
R.layout.callforward\u项,
新字符串[]{“line1”,“line2”},
新int[]{R.id.callforward\u item\u text,R.id.callforward\u number});
新建PullInfoTask().execute();
setListAdapter(callForwardList);
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
开关(位置)
{
案例0:
customDialogOnAlways();
打破
案例1:
customDialogOnBusy();
打破
案例2:
customDialogOnNoAnswer();
打破
}
}
});
}
编辑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 );
}
private void populateList()
{
cfinfo=userControl.GetCallForwardInfo();
if(Integer.parseInt(cfinfo[0])==1)
补充(“视频静止高度”,cfinfo[1]);
其他的
补充(“视频静止高度”、“Slået fra”);
if(Integer.parseInt(cfinfo[2])==1)
补充(“Viderestilling ved optaget”,cfinfo[3]);
其他的
补充(“Viderestilling ved optaget”、“Slået fra”);
if(Integer.parseInt(cfinfo[4])==1)
补充(“Viderestilling ved intet svar”,cfinfo[5]);
其他的
附加条款(“Viderestilling ved intet svar”、“Slået fra”);
callForwardList.notifyDataSetChanged();
}
专用void附加项(字符串标签、字符串编号)
{
HashMap项=新建HashMap();
项目。放置(“第1行”,标签);
项目。放置(“第2行”,编号);
列表。添加(项目);
}
您必须创建全局变量列表,以便callForwardList可以通过notify change获取它。下面是工作代码
SimpleAdapter callForwardList;
ArrayList<HashMap<String, String>> list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
ListView lv = getListView();
list = new ArrayList<HashMap<String,String>>();
HashMap<String,String> item = new HashMap<String,String>();
item.put( "line1", "asas" );
item.put( "line2", "12121" );
list.add( item );
callForwardList = new SimpleAdapter(
this,
list,
R.layout.callforward_items,
new String[] { "line1","line2" },
new int[] { R.id.callforward_item_text, R.id.callforward_number } );
setListAdapter( callForwardList );
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
HashMap<String,String> item = new HashMap<String,String>();
item.put( "line1", "asas111" );
item.put( "line2", "1212111" );
list.add( item );
callForwardList.notifyDataSetChanged();
}
});
}
public void addf(View v)
{
HashMap<String,String> item = new HashMap<String,String>();
item.put( "line1", "asas111" );
item.put( "line2", "1212111" );
list.add( item );
callForwardList.notifyDataSetChanged();
}
SimpleAdapter callForwardList;
数组列表;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
ListView lv=getListView();
列表=新的ArrayList();
HashMap项=新建HashMap();
第1行(“asas”);
项目.投入(“第2行”、“第12121行”);
列表。添加(项目);
callForwardList=新的SimpleAdapter(
这
列表
R.layout.callforward\u项,
新字符串[]{“line1”,“line2”},
新int[]{R.id.callforward\u item\u text,R.id.callforward\u number});
setListAdapter(callForwardList);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
HashMap项=新建HashMap();
项目.投入(“第1行”、“asas111”);
项目.投入(“第2行”、“1212111”);
列表。添加(项目);
callForwardList.notifyDataSetChanged();
}
});
}
公共无效地址(视图五)
{
HashMap项=新建HashMap();
项目.投入(“第1行”、“asas111”);
项目.投入(“第2行”、“1212111”);
列表。添加(项目);
callForwardList.notifyDataSetChanged();
}
populateList的代码在哪里?我的适配器和列表已全局声明。但是我真的看不出你建议的其余部分对我的解决方案有什么帮助。你的列表变量被声明为全局变量?