创建 Loader 时不兼容的类型
Incompatible types when create Loader
我对装载机有一些问题。
我有Fragment,他实现LoaderManager.LoaderCallbacks。
当我执行 onCreateLoader 时,发生错误 Incompatible types。 (错误的上下文)
我的代码示例使用 "getActivity()" 或 "getContext()"。如何解决错误?谢谢
片段
public class FitnessDataFragment extends Fragment implements LoaderManager.LoaderCallbacks<List<AllFitnessDataModel>> {
private Loader<List<AllFitnessDataModel>> loader;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loader = getActivity().getSupportLoaderManager().initLoader(LOADER_ID, getArguments(), this);
}
@Override
public Loader<List<AllFitnessDataModel>> onCreateLoader(int id, Bundle args) {
return new AsyncTracksLoader(getActivity(),args);
}
加载器
public class AsyncTracksLoader extends AsyncTaskLoader<List<AllFitnessDataModel>> {
private List<AllFitnessDataModel> dataModelList = new ArrayList<>();
private int typeReminder;
public AsyncTracksLoader(Context context, Bundle args) {
super(context);
if (args != null) {
typeReminder = args.getInt(ARG_SECTION_NUMBER);
}
}
@Override
protected void onStartLoading() {
super.onStartLoading();
if(dataModelList!=null){
deliverResult(dataModelList);
}else {
forceLoad();
}
}
@Override
public List<AllFitnessDataModel> loadInBackground() {
//do something
return dataModelList;
}
@Override
public void deliverResult(List<AllFitnessDataModel> data) {
dataModelList = data;
super.deliverResult(data);
}
}
导入片段
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.egoriku.catsrunning.App;
import com.egoriku.catsrunning.R;
import com.egoriku.catsrunning.activities.ScamperActivity;
import com.egoriku.catsrunning.activities.TrackOnMapsActivity;
import com.egoriku.catsrunning.activities.TracksActivity;
import com.egoriku.catsrunning.adapters.FitnessDataAdapter;
import com.egoriku.catsrunning.adapters.interfaces.IOnItemHandlerListener;
import com.egoriku.catsrunning.loaders.AsyncTracksLoader;
import com.egoriku.catsrunning.models.AllFitnessDataModel;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.ValueEventListener;
import java.util.List;
片段有自己的加载器管理器 - 尝试调用 getLoaderManager()
而不是 getActivity().getSupportLoaderManager()
。
还要确保在 android.app
或 android.support.v4.app
中使用 LoaderManager
、LoaderManager.LoaderCallbacks
等保持一致。
还有一件事要确保,当您编写 "implements ..." 并弹出建议时,请确保您 select 根据您实现加载程序的方式使用正确的版本。它有两个版本。一个是辅助一个,一个是普通的。
我对装载机有一些问题。 我有Fragment,他实现LoaderManager.LoaderCallbacks。 当我执行 onCreateLoader 时,发生错误 Incompatible types。 (错误的上下文) 我的代码示例使用 "getActivity()" 或 "getContext()"。如何解决错误?谢谢
片段
public class FitnessDataFragment extends Fragment implements LoaderManager.LoaderCallbacks<List<AllFitnessDataModel>> {
private Loader<List<AllFitnessDataModel>> loader;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loader = getActivity().getSupportLoaderManager().initLoader(LOADER_ID, getArguments(), this);
}
@Override
public Loader<List<AllFitnessDataModel>> onCreateLoader(int id, Bundle args) {
return new AsyncTracksLoader(getActivity(),args);
}
加载器
public class AsyncTracksLoader extends AsyncTaskLoader<List<AllFitnessDataModel>> {
private List<AllFitnessDataModel> dataModelList = new ArrayList<>();
private int typeReminder;
public AsyncTracksLoader(Context context, Bundle args) {
super(context);
if (args != null) {
typeReminder = args.getInt(ARG_SECTION_NUMBER);
}
}
@Override
protected void onStartLoading() {
super.onStartLoading();
if(dataModelList!=null){
deliverResult(dataModelList);
}else {
forceLoad();
}
}
@Override
public List<AllFitnessDataModel> loadInBackground() {
//do something
return dataModelList;
}
@Override
public void deliverResult(List<AllFitnessDataModel> data) {
dataModelList = data;
super.deliverResult(data);
}
}
导入片段
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.egoriku.catsrunning.App;
import com.egoriku.catsrunning.R;
import com.egoriku.catsrunning.activities.ScamperActivity;
import com.egoriku.catsrunning.activities.TrackOnMapsActivity;
import com.egoriku.catsrunning.activities.TracksActivity;
import com.egoriku.catsrunning.adapters.FitnessDataAdapter;
import com.egoriku.catsrunning.adapters.interfaces.IOnItemHandlerListener;
import com.egoriku.catsrunning.loaders.AsyncTracksLoader;
import com.egoriku.catsrunning.models.AllFitnessDataModel;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.ValueEventListener;
import java.util.List;
片段有自己的加载器管理器 - 尝试调用 getLoaderManager()
而不是 getActivity().getSupportLoaderManager()
。
还要确保在 android.app
或 android.support.v4.app
中使用 LoaderManager
、LoaderManager.LoaderCallbacks
等保持一致。
还有一件事要确保,当您编写 "implements ..." 并弹出建议时,请确保您 select 根据您实现加载程序的方式使用正确的版本。它有两个版本。一个是辅助一个,一个是普通的。