I reviewed some examples of working with AsyncTaskLoader and Fragment ( https://gist.github.com/codeswimmer/884591 ), and I tried to do the same. But now I canβt fix incompatible error types - in method onCreateLoader. I have no idea why this is happening because I did the same.
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()); } @Override public void onLoadFinished(Loader<ArrayList<RSSItemData>> loader, ArrayList<RSSItemData> listData) {
MainActivity.java (just in case)
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"); } } }
source share