2016-11-11 3 views
0

Ich habe ein Problem mit Loadern. Ich habe Fragment, er implementiert LoaderManager.LoaderCallbacks. Wenn onCreateLoader ausgeführt wird, tritt der Fehler Inkompatible Typen auf. (Falscher Kontext) I Codebeispiele verwendet "getActivity()" oder "getContext()". Wie kann man einen Fehler beheben? Vielen Dank.Inkompatible Typen beim Erstellen Loader

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; 
+0

Können Sie auch die Importe hinzufügen, damit wir vergleichen können. – Enzokie

+0

@Enzokie Ich habe hinzugefügt –

+0

Eigentlich dieses "getActivity(). GetSupportLoaderManager(). InitLoader (LOADER_ID, getArguments(), this);' kompiliert mich nicht, da es eine Aktivität und keine FragmentActivity ist, es sei denn Sie werfen es. – Enzokie

Antwort

2

Fragmente haben thei r eigene Loader-Manager - versuchen Sie getLoaderManager() statt getActivity().getSupportLoaderManager() anrufen.

Auch stellen Sie sicher, dass Sie in Bezug auf konsistente wir Sie, ob Sie android.app oder android.support.v4.app für LoaderManager, LoaderManager.LoaderCallbacks verwenden und so weiter.

0

Um sicherzugehen, dass beim Schreiben von "implements ..." und dem Vorschlag, dass Sie die richtige Version auswählen, je nachdem, wie Sie Ihren Loader implementiert haben. Es gibt zwei Versionen davon. Einer ist der Support eins und einer ist der normale.