向上导航重新加载加载器,但后退导航不

时间:2016-11-20 19:20:21

标签: android loader up-button

我正在使用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

`

谢谢!

1 个答案:

答案 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;
    }