Android Studio 不接受 "this" 作为 OnRefreshListener 中的 LoaderCallBack 参数

Android Studio doesn't accept "this" as LoaderCallBack argument inside OnRefreshListener

我正在尝试将滑动刷新布局添加到我的片段中。我正在使用 AsyncTaskLoader 加载数据。在设置刷新布局的 OnRefreshListener 时,我想重新启动加载程序以加载新数据(否则我应该做不同的事情)但我无法处理 loaderCallBacks 参数。如果我使用 "this",它会出错。它说 "Found OnRefreshListener, Required LoaderManager.LoaderCallback" 对象。 (我有我的 OnCreateLoader、OnLoadFinished 和 OnLoaderReset。)

这是我的代码:

// class declaration
public class FragmentTopNews extends Fragment
    implements LoaderManager.LoaderCallbacks<List<NewsItem>>, NewsAdapter.OnItemClickListener{

...

if(activeNetwork != null && activeNetwork.isConnected()){
   LoaderManager loaderManager = getLoaderManager();
   loaderManager.initLoader(NEWS_LOADER_ID, null,this);
   } 

    // SwipeRefreshlayout for refreshing the data
    mSwipeRefreshLayout = rootView.findViewById(R.id.srl_refresher);
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mNewsAdapter.clearData();
            mNewsAdapter.notifyDataSetChanged();
            mSwipeRefreshLayout.setRefreshing(true);
            // Here is the problem
            getLoaderManager().restartLoader(NEWS_LOADER_ID, null, this);
        }
    });

我的第二个问题是 "getloaderManager()" 术语被删除线告诉我它已被弃用。我能为它做什么?

第一个问题:

当您设置侦听器时,您创建了一个新的匿名内部 class OnRefreshListener 实例,这意味着 this 是它的一个实例,而不是实现 LoaderCallbacks.

改用FragmentTopNews.this

getLoaderManager().restartLoader(NEWS_LOADER_ID, null, FragmentTopNews.this);

第二个问题:

android.app.Fragment 及其相关的 classes 已在 API 28 中弃用。您应该改用 android.support.v4.app 版本。换句话说,改变你的进口。您还必须开始使用 AppCompatActivity 和 getSupportFragmentManager().

编辑:

支持文档似乎已过时。我实际上必须去 AOSP 才能找到它,但 Fragment#getLoaderManager() 确实已被弃用。使用 LoaderManager.getInstance(Fragment).