【发布时间】:2017-01-25 08:58:02
【问题描述】:
在首选项更改侦听器中,我已将其设置为使用Loader 下载新数据,然后填充ListView,但是当我更改首选项时仅调用onCreateLoader() 函数,onLoadFinished() 回调函数保持未调用,因此我的ListView 没有用新数据更新,我也碰巧有一个刷新按钮,它做同样的事情,即下载数据增益并用新数据填充列表,但这里onLoadFinished() 被调用,因此通过更新列表。
刷新按钮代码
case R.id.menu_refresh :
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if(isConnected)
{
getSupportLoaderManager().initLoader(0,null,this).forceLoad();
}
else {
Toast.makeText(this,"No Internet",Toast.LENGTH_SHORT).show();
}
break;
SharedPreference 监听器代码:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if(isConnected)
{
//delfromold();
getSupportLoaderManager().initLoader(0,null,this).forceLoad();
Log.v("Prefrences Changed",s);
}
}
编辑
加载器实现
public class Loade extends AsyncTaskLoader<ArrayList<CustomL>>{
Context mCon;
public Loade(Context context) {
super(context);
mCon = context;
}
@Override
public ArrayList<CustomL> loadInBackground() {
ArrayList<CustomL> maList = null;
try {
Log.v("Loader","Called");
maList = GetList.makelist(mCon);
} catch (JSONException e) {
e.printStackTrace();
}
return maList;
}
}
加载器:
public Loader<ArrayList<CustomL>> onCreateLoader(int id, Bundle args) {
return new Loade(this);
}
public void onLoadFinished(Loader<ArrayList<CustomL>> loader, ArrayList<CustomL> data) {
Log.v("Load","Finished");
maklst(data);
}
【问题讨论】:
-
在 Getlist 类的 makelist 函数中,新数据被下载并保存到表中,我可以确认,但是,它只是停在那里 onLoadFinished dosnt 被调用和 maklst 函数用新数据更新列表永远不会被调用,但是当我从刷新调用同一个加载器时,会调用 onLoadFinished
标签: android sharedpreferences loader