在首選項更改偵聽我已經把它用Loader
下載新數據,然後填寫ListView
,但是當我改變偏好僅被稱爲onCreateLoader()
功能,onLoadFinished()
回調函數仍然是多餘的,因此我的ListView
沒有更新新的數據,我也碰巧有一個刷新按鈕,做同樣的事情,即下載數據增益和填充新數據的列表,但這裏onLoadFinished()
因此通過更新列表來調用。裝載機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函數永遠不會被調用,但是當我調用相同的loader從刷新onLoadFinished被調用 –