0

I have some problem with Loaders. I have Fragment, he implements LoaderManager.LoaderCallbacks. When I do onCreateLoader, occurs error Incompatible types. (Wrong Context) I code samples uses "getActivity()" or "getContext()". How to resolve error? Thanks.

Fragment

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

Loader

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

Imports Fragment

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;
Yahor Urbanovich
  • 733
  • 1
  • 9
  • 17

2 Answers2

2

Fragments have their own loader managers - try calling getLoaderManager() instead of getActivity().getSupportLoaderManager().

Also make sure that you're being consistent in terms of whether you're using android.app or android.support.v4.app for LoaderManager, LoaderManager.LoaderCallbacks and so on.

clownba0t
  • 1,103
  • 10
  • 12
0

One thing more to make sure is when you are writing "implements ..." and suggestion pops up , make sure that you select the correct version according to how you implemented your loader . There are two versions of it . One is the support one and one is the normal one .