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)
.
我正在尝试将滑动刷新布局添加到我的片段中。我正在使用 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)
.