return 后调用 OnLoadFinished 进行分片
Call OnLoadFinished after return to fragment
我在使用 AsyncTaskLoader 时遇到了一些问题。
我的 Activity 有 2 个片段:FragmentA 和 FragmentB。在 onCreateView() 的 FragmentA 中,我启动了加载程序。它启动、加载 return 数据到 onLoadFinished()。没关系。现在我用 Fragment B 替换 FragmentA:
FragmentB fragmentB = FragmentB.createInstance(movieId);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.fragment_container, fragmentB).commit();
之后,我单击后退按钮并从片段 B 返回到片段 A。就在 return 转到片段 A 之后,我再次调用了 onLoadFinished(),但我不想要它。
我的装载机:
private Response data;
public Loader(Context context) {
super(context);
}
@Override
public void deliverResult(Response data) {
if(isReset()) {
return;
}
if(isStarted())
super.deliverResult(data);
}
@Override
protected void onStartLoading() {
if (this.data != null) {
deliverResult(this.data);
}
if (this.data == null) {
forceLoad();
}
}
@Override
protected void onStopLoading() {
cancelLoad();
}
@Override
protected void onReset() {
onStopLoading();
if(this.data != null) {
data = null;
}
}
不要使用这个fragmentTransaction.replace(R.id.fragment_container, fragmentB).commit();
代替调用add方法来添加片段
fragmentTransaction.add(R.id.fragment_container, fragmentB).commit();
我在使用 AsyncTaskLoader 时遇到了一些问题。 我的 Activity 有 2 个片段:FragmentA 和 FragmentB。在 onCreateView() 的 FragmentA 中,我启动了加载程序。它启动、加载 return 数据到 onLoadFinished()。没关系。现在我用 Fragment B 替换 FragmentA:
FragmentB fragmentB = FragmentB.createInstance(movieId);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.fragment_container, fragmentB).commit();
之后,我单击后退按钮并从片段 B 返回到片段 A。就在 return 转到片段 A 之后,我再次调用了 onLoadFinished(),但我不想要它。
我的装载机:
private Response data;
public Loader(Context context) {
super(context);
}
@Override
public void deliverResult(Response data) {
if(isReset()) {
return;
}
if(isStarted())
super.deliverResult(data);
}
@Override
protected void onStartLoading() {
if (this.data != null) {
deliverResult(this.data);
}
if (this.data == null) {
forceLoad();
}
}
@Override
protected void onStopLoading() {
cancelLoad();
}
@Override
protected void onReset() {
onStopLoading();
if(this.data != null) {
data = null;
}
}
不要使用这个fragmentTransaction.replace(R.id.fragment_container, fragmentB).commit();
代替调用add方法来添加片段
fragmentTransaction.add(R.id.fragment_container, fragmentB).commit();