[英]Can't use "this" as an argument in the getLoaderManager().initLoader() method
Instead of using some of the deprecated SimpleCursorAdapter constructors, many people have suggested to use LoaderManager and CursorLoader.许多人建议使用 LoaderManager 和 CursorLoader,而不是使用一些已弃用的 SimpleCursorAdapter 构造函数。 So when calling getLoaderManager().initLoader() it gives me this error:
所以当调用 getLoaderManager().initLoader() 时它给了我这个错误:
The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks) in the type LoaderManager is not applicable for the arguments (int, null, SearchResultsActivity) LoaderManager 类型中的方法 initLoader(int, Bundle, LoaderManager.LoaderCallbacks) 不适用于 arguments (int, null, SearchResultsActivity)
I have tried importing the v4 version of the loadermanager and cursorloader, but that has not seem to work.我已经尝试导入 v4 版本的 loadermanager 和 cursorloader,但这似乎不起作用。 I have also tried the getSupportLoaderManager(), which doesn't work as well.
我还尝试了 getSupportLoaderManager(),但效果不佳。 I noticed that some people are getting this error and have looked through the conversation to try and find solutions, but the ones I have found don't work.
我注意到有些人遇到了这个错误并查看了对话以尝试找到解决方案,但我发现的那些不起作用。 I am calling the LoaderManager within the showResults() method btw
我在 showResults() 方法中调用 LoaderManager 顺便说一句
Code for searchable activity:可搜索活动的代码:
import android.os.Bundle;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.app.SearchManager;
import android.app.ListActivity;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SimpleCursorAdapter;
import android.content.Context;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
public class SearchResultsActivity extends FragmentActivity {
private ListView list;
DatabaseTable db;
LoaderManager lm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_results);
db = new DatabaseTable(this);
handleIntent(getIntent());
}
public void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
showResults(query);
}
}
private void showResults(String query) {
db = new DatabaseTable(this);
Cursor cursor = db.getContactMatches(query, null);
list = (ListView)findViewById(android.R.id.list);
getSupportLoaderManager().initLoader(0, null, this);
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1,
null, new String[] {DatabaseTable.COL_NAME}, new int[] {android.R.id.text1}, 0);
list.setAdapter(mAdapter);
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent contactIntent = new Intent(getApplicationContext(), ContactActivity.class);
contactIntent.setData(getIntent().getData());
startActivity(contactIntent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.search:
onSearchRequested();
return true;
default:
return false;
}
}
} }
The method
initLoader(int, Bundle, LoaderManager.LoaderCallbacks)
in the type LoaderManager is not applicable for the arguments(int, null, SearchResultsActivity)
initLoader(int, Bundle, LoaderManager.LoaderCallbacks)
类型的方法initLoader(int, Bundle, LoaderManager.LoaderCallbacks)
不适用于参数(int, null, SearchResultsActivity)
Simply put: SearchResultsActivity
must implement LoaderManager.LoaderCallbacks
. 简而言之:
SearchResultsActivity
必须实现LoaderManager.LoaderCallbacks
。 Otherwise this
doesn't refer to an instance of LoaderManager.LoaderCallbacks
... 否则,
this
不会引用LoaderManager.LoaderCallbacks
的实例。
First you must implement your class with LoaderManager.LoaderCallbacks and then you can use "this" keyword in initLoader method (remember that support library is deprecated and you use LoaderManager.getInstance(this)
instead of getLoaderManager()
首先,您必须使用 LoaderManager.LoaderCallbacks 实现 class,然后您可以在 initLoader 方法中使用“this”关键字(请记住支持库已弃用,您使用
LoaderManager.getInstance(this)
而不是getLoaderManager()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.