Tipos incompatibles en el método onCreateLoader que trabaja con AsyncTaskLoader y Fragment
Considere algunos ejemplos de trabajo con AsyncTaskLoader y Fragment (https://gist.github.com/codeswimmer/884591) e intenté hacer lo mismo. Pero ahora no puedo corregir el error de tipos incompatibles, en el método onCreateLoader. No tengo idea de por qué sucede, porque he hecho lo mismo.
FeedLoader.java
public class FeedLoader extends AsyncTaskLoader<ArrayList<RSSItemData>> {
ArrayList<RSSItemData> listData;
Context ctx;
RSSItemData rssItem;
final Integer HTTP_CONNECTION_TIMEOUT = 15;
DBHelper dbHelper;
public FeedLoader(Context context) {
super(context);
this.ctx = context;
dbHelper = new DBHelper(ctx);
}
@Override
public ArrayList<RSSItemData> loadInBackground() {
listData = new ArrayList<RSSItemData>();
if(!BaseUtils.isNetworkAvailable(ctx)) return getNewsFromDB();
if(doWeHaveAnyNews()){
Log.d("myLogs", "We have news!");
String data = JSONUtils.getJSON("http://I-changed-URL.com", HTTP_CONNECTION_TIMEOUT*1000, ctx);
JSONResult result = new Gson().fromJson(data, JSONResult.class);
listData = result.items;
deleteAllNewsFromDB();
putNewsIntoDB(listData);
}
else{
Log.d("myLogs", "No news, retrieve from database");
listData = getNewsFromDB();
}
Log.d("myLogs", "Size of listData - " + listData.size());
return listData;
}
public boolean doWeHaveAnyNews() {...}
public void putNewsIntoDB(ArrayList<RSSItemData> listData) {...}
public void deleteAllNewsFromDB() {...}
public ArrayList<RSSItemData> getNewsFromDB() {...}
}
RetrieveFeedFragment.java
public class RetrieveFeedFragment extends Fragment implements LoaderManager.LoaderCallbacks<ArrayList<RSSItemData>> {
private RecyclerView rvNews;
LinearLayout progBarLinearLayout;
ProgressBar progBar;
TextView progBarText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
getActivity().getSupportLoaderManager().initLoader(0, null, this).forceLoad();
Log.d("myLogs", "Fragment onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d("myLogs", "Fragment onCreateView");
View v = inflater.inflate(R.layout.news_list_fragment, null);
rvNews = (RecyclerView) v.findViewById(R.id.listViewNews);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
rvNews.setLayoutManager(llm);
rvNews.setHasFixedSize(true);
rvNews = (RecyclerView) v.findViewById(R.id.listViewNews);
progBarLinearLayout = (LinearLayout) v.findViewById(R.id.progressBarLinearLayout);
progBar = (ProgressBar) v.findViewById(R.id.progressBar);
progBarText = (TextView) v.findViewById(R.id.progressBarText);
return v;
}
@Override
public Loader<ArrayList<RSSItemData>> onCreateLoader(int id, Bundle args) {
return new FeedLoader(getActivity());
/* Incompatible types ERROR
Required - anroid.support.v4.content.Loader <java.util.ArrayList<com.project.myproject.RetrieveFeed.RSSItemData>>
Found - com.project.myproject.RetrieveFeed.FeedLoader
*/
}
@Override
public void onLoadFinished(Loader<ArrayList<RSSItemData>> loader, ArrayList<RSSItemData> listData) {
// RSSAdapter = new RSSAdapter(listData, getActivity());
// rvNews.setAdapter(RSSAdapter);
// progBarLinearLayout.setVisibility(LinearLayout.GONE);
Log.d("myLogs", "onLoadFinished");
}
@Override
public void onLoaderReset(Loader<ArrayList<RSSItemData>> loader) {
Log.d("myLogs", "onLoaderReset");
}
}
MainActivity.java (por si acaso)
public class MainActivity extends FragmentActivity {
RetrieveFeedFragment fragment;;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState == null){
fragment = new RetrieveFeedFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_news, fragment, "retrieve_feed_tag").commit();
Log.d("myLogs", "New Fragment in Activity");
}
else{
fragment = (RetrieveFeedFragment) getSupportFragmentManager().findFragmentByTag("retrieve_feed_tag");
Log.d("myLogs", "Get old Fragment by tag in Activity");
}
}
}