2017-08-02 97 views
-1

我想將上下文傳遞到自定義加載程序中,但我得到的類型不匹配。在onCreateLoaderreturn new NewsLoader(CONTEXT, url);我曾嘗試使用getActivity()getContext()getApplicationContext()方法作爲輸入。Fragment類中的加載器上下文

錯誤;

getContext()「必需android.support.v4.loader <java.util.arraylist<com.example.android.greennewswire.News>

this NewsLoader(android.content.Context,字符串)在NewsLoader不能被應用到(com.example.android.greennewswire.NewsFragmentBBC,字符串)

`package com.example.android.greennewswire; 

import android.content.Context; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.Loader; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import java.util.ArrayList; 


public class NewsFragmentBBC extends Fragment implements LoaderManager.LoaderCallbacks<ArrayList<News>>{ 

    //String object holding the network request URL to be passed into the Loader 
    private static final String NEWS_REQUEST_URL = "https://www.googleapis.com/books/v1/volumes?q=android"; 

    public NewsFragmentBBC() { 
     // Required empty public constructor 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.list, container, false); 

     //Create a LoaderManager and initialise the Loader 
     LoaderManager loaderManager = getLoaderManager(); 
     loaderManager.initLoader(1, null, this); 




     return rootView; 
    } 

    @Override 
    public Loader<ArrayList<News>> onCreateLoader(int id, Bundle args) { 
     return new NewsLoader(this, NEWS_REQUEST_URL); 
    } 

    @Override 
    public void onLoadFinished(Loader<ArrayList<News>> loader, ArrayList<News> data) { 

    } 

    @Override 
    public void onLoaderReset(Loader<ArrayList<News>> loader) { 

     } 
    } 

NewsLoader類

package com.example.android.greennewswire; 

import android.content.AsyncTaskLoader; 
import android.content.Context; 

import java.util.ArrayList; 



public class NewsLoader extends AsyncTaskLoader<ArrayList<News>> { 

    private String mUrl; 

    //Default constructor to take input objects 
    public NewsLoader (Context context, String url) { 
     super(context); 
     mUrl = url; 
    } 

    @Override 
    protected void onStartLoading() { 
     forceLoad(); 
    } 

    @Override 
    public ArrayList<News> loadInBackground() { 
     //Null check 
     if (mUrl == null) { 
      return null; 
     } 
     ArrayList<News> news = QueryUtils.fetchNewsData(mUrl); 
     return news; 
    } 
} 

回答

0

我通過改變進口溴化鋰固定這LoaderManager的aries從android.support.v4.app.LoaderManagerandroid.app.LoaderManager,並確保實現的回調符合該庫。然後我可以毫無問題地在我的NewsLoader參數中使用getContext()方法。