我在使用AsyncTaskLoader方面遇到了一些麻烦。 我的Activity有2个片段:FragmentA和FragmentB。在FragmentA的onCreateView()我参加了我的装载机。它启动,加载和返回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.然后在返回片段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;
}
}
答案 0 :(得分:1)
不要使用此fragmentTransaction.replace(R.id.fragment_container, fragmentB).commit();
而不是替换call add方法来添加片段
fragmentTransaction.add(R.id.fragment_container, fragmentB).commit();