gpt4 book ai didi

android - 向上导航会重新加载加载器,但向后导航不会

转载 作者:行者123 更新时间:2023-11-30 00:52:45 25 4
gpt4 key购买 nike

我正在使用 AsyncTaskLoader 将来自 HTTPRequest 的数据加载到 ArrayList 中。加载后,数据将通过回收器 View 显示为列表。当我单击列表中的一项时,将触发 Activity B,显示该数据的详细屏幕。然后,我有两个选项可以返回列表,一个是通过后退按钮(电话),另一个是通过工具栏上的向上按钮 <- 因为 avtivity B 它有 android.support.PARENT_ACTIVITY实现。

好吧,后退按钮不会触发加载器,但上按钮会重新加载整个东西。到底是怎么回事?我希望两者的行为相同,即不像我在 onStartLoading() 中指定的那样重新加载.

这是我的 AsynTask 加载器,它通过实现 LoaderCallbacks<List<T>> 像往常一样调用。界面

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);
}}

onCreate在 Activity A 中,我调用了这样的加载程序

`LoaderManager loaderManager = getLoaderManager();loaderManager.initLoader(0, null, this);

然后,我实现接口(interface):

    @Override
public Loader<List<Falla>> onCreateLoader(int i, Bundle bundle)
{
return new FallaLoader(this, F_URL);
}

@Override
public void onLoadFinished(Loader<List<Falla>> loader, List<Falla> fallas)
{
View loadingIndicator = findViewById(R.id.loading_indicator);
loadingIndicator.setVisibility(View.GONE);
mEmptyStateTextView.setText(R.string.no_fallas);

if (fallas != null && !fallas.isEmpty())
{
adapter.swap(fallas);
}
}

@Override
public void onLoaderReset(Loader<List<Falla>> loader) {

}

`

谢谢!

最佳答案

当你从activity B回来的时候, onStartLoading将再次被调用,因为加载器知道 Activity 状态。现在当您按下手机的后退按钮时, Activity 将被简单地带到前面,但如果您工具栏中的后退按钮,之前的 Activity 将再次创建,因此您的加载程序将重新初始化并且if (mFalla == null)将变为真,导致调用 forceLoad() .

您可以在activity B 中明确处理工具栏的后退按钮单击。以避免这种行为。

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){
onBackPressed();
}
return true;
}

关于android - 向上导航会重新加载加载器,但向后导航不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40708345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com