Нажатие кнопки «Назад» из-за намерения вернуть «Фрагмент» исчезает из списка повторного просмотра в Android? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть элементы списка пользовательских объектов, и я использую 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();
    }
}

1 Ответ

0 голосов
/ 22 сентября 2018

Хорошо, я решил проблему.

Я заметил, что когда я нажимаю кнопку «Назад», загрузчик запускается снова (чего я не хочу), и в методе OnStart моего AsynctaskLoader у меня есть «forceload ()"команда, которая выполняется каждый раз.Поэтому я изменил это на:

    @Override
protected void onStartLoading() {
    // Added this check to not load data when back button is triggered.
    if (news == null || news.isEmpty()) {
        forceLoad();
    }
}
...