У меня есть элементы списка пользовательских объектов, и я использую Recycleler для их отображения и использую загрузчики для подключения к Интернету.Моя проблема заключается в том, что при щелчке по элементу срабатывает намерение пользовательских вкладок Google Chrome (вы перенаправлены на соответствующий веб-сайт), но при нажатии кнопки «Назад» на веб-сайте для возврата фрагмента элементы recylerview исчезают (что интересно, исчезает через несколько секунд),Я хочу вернуться к предыдущему экрану без обновления.Там нет ошибки.Это случилось после того, как я добавил SwipeRefreshlayout.Я разделяю связанные части кода:
public class FragmentTopNews extends Fragment
implements LoaderManager.LoaderCallbacks<List<NewsItem>>, NewsAdapter.OnItemClickListener{
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
....
// SwipeRefreshlayout for refreshing the data
mSwipeRefreshLayout = rootView.findViewById(R.id.srl_refresher);
mSwipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary, R.color.colorPrimaryDark);
mSwipeRefreshLayout.canChildScrollUp();
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mNewsAdapter.clearData();
mNewsAdapter.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(true);
// Restart the loader
LoaderManager.getInstance(FragmentTopNews.this).restartLoader
(NEWS_LOADER_ID, null, FragmentTopNews.this);
}
});
return rootView;
}
@Override
public void onItemClick(String newsUrl) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(getActivity(), Uri.parse(newsUrl));
}
@NonNull
@Override
public android.support.v4.content.Loader<List<NewsItem>> onCreateLoader(int i, @Nullable Bundle bundle) {
return new NewsLoaderTopNews(getContext(), NEWS_URLS);
}
@Override
public void onLoadFinished(@NonNull android.support.v4.content.Loader<List<NewsItem>> loader, List<NewsItem> newsItems) {
// Hide loading indicator because the data has been loaded
mLoadingIndicator.setVisibility(View.INVISIBLE);
// Hide refreshing indicator
mSwipeRefreshLayout.setRefreshing(false);
if (newsItems != null && !newsItems.isEmpty()) {
// Clear the adapter of previous data
mNewsAdapter.clearData();
// pass in the news data to the adapter
mNewsAdapter.setNewsData(newsItems);
mNewsAdapter.notifyDataSetChanged();
} else { // tell the user that the news can't be loaded
mRecyclerView.setVisibility(View.INVISIBLE);
mErrorView.setVisibility(View.VISIBLE);
mErrorView.setText(R.string.no_data);
}
}
@Override
public void onLoaderReset(@NonNull android.support.v4.content.Loader<List<NewsItem>> loader) {
Log.i(LOG_TAG, "onLoaderReset is called");
// Clear the adapter of previous data
mNewsAdapter.clearData();
}
}
И это метод переопределения onstartLoading:
//this is required to trigger the loader to start doing background work
@Override
protected void onStartLoading() {
forceLoad();
}
}