我正在使用AsyncTaskLoader将数据加载到来自HTTPRequest的ArrayList中。加载后,数据将通过回收站视图显示为列表。当我点击列表中的某个项目时,活动B会被触发,显示该数据的详细屏幕。然后,我有两个选项可以回到列表,一个是通过后退按钮(电话),另一个是通过工具栏上的向上按钮< - ,因为avtivity B它有{{ 1}}实现。
好吧,后退按钮不会触发加载程序,但upbutton会重新加载整个内容。到底是怎么回事?我希望两者的行为相同,即不按我在android.support.PARENT_ACTIVITY
中指定的重新加载。
这是我的AsynTask加载器,通常通过实现onStartLoading()
接口
LoaderCallbacks<List<T>>
在活动A的public class FallaLoader extends AsyncTaskLoader<List<Falla>> {
private String mUrl;
private List<Falla> mFalla;
FallaLoader(Context context, String url)
{
super(context);
mUrl = url;
}
@Override
protected void onStartLoading()
{
if (mFalla == null) {
// we have no data, so kick off loading
forceLoad();
}
else {
// use cached data, fallas won't change for a year, so... just needed everytime I start
deliverResult(mFalla);
}
}
// This happens in the Background thread
@Override
public List<Falla> loadInBackground()
{
if (mUrl == null)
{
return null;
}
// Perform the network request, parse the response, and extract a list of earthquakes.
// pass the context since it will be needed to get the preferences
return Utils.fetchFallasData(mUrl, getContext());
}
@Override
public void deliverResult(List<Falla> data)
{
// We’ll save the data for later retrieval
mFalla = data;
super.deliverResult(data);
}}
中,我调用了像这样的加载程序
`LoaderManager loaderManager = getLoaderManager(); loaderManager.initLoader(0,null,this);
然后,我实现了界面:
onCreate
`
谢谢!
答案 0 :(得分:1)
当您从activity B
返回时,onStartLoading
将再次被调用,因为加载程序已知道活动状态。现在,当您按下按钮时电话,活动将简单地显示在前面,但如果您在工具栏中按下,之前的活动将再次创建,因此,您的加载程序将重新初始化,if (mFalla == null)
将变为true,从而调用forceLoad()
。
您可以在activity B
中明确处理工具栏的后退按钮,以避免此行为。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){
onBackPressed();
}
return true;
}