0

许多人建议使用 LoaderManager 和 CursorLoader,而不是使用一些已弃用的 SimpleCursorAdapter 构造函数。所以当调用 getLoaderManager().initLoader() 它给了我这个错误:

LoaderManager 类型中的方法 initLoader(int, Bundle, LoaderManager.LoaderCallbacks) 不适用于参数 (int, null, SearchResultsActivity)

我曾尝试导入 loadermanager 和 cursorloader 的 v4 版本,但这似乎不起作用。我也尝试过 getSupportLoaderManager(),它也不起作用。我注意到有些人遇到了这个错误,并查看了对话以尝试找到解决方案,但我发现的那些不起作用。我在 showResults() 方法中调用 LoaderManager 顺便说一句

可搜索活动的代码:

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;
        }
    }

}

4

2 回答 2

0

LoaderManager 类型中的方法initLoader(int, Bundle, LoaderManager.LoaderCallbacks)不适用于参数(int, null, SearchResultsActivity)

简单地说:SearchResultsActivity 必须实现LoaderManager.LoaderCallbacks. 否则this不引用LoaderManager.LoaderCallbacks...的实例

于 2013-01-03T00:31:07.147 回答
0

首先,您必须使用 LoaderManager.LoaderCallbacks 实现您的类,然后您可以在 initLoader 方法中使用“this”关键字(请记住,支持库已被弃用,您可以使用LoaderManager.getInstance(this)而不是getLoaderManager()

于 2021-09-27T14:31:10.280 回答