0

非推奨の SimpleCursorAdapter コンストラクターを使用する代わりに、多くの人が LoaderManager と CursorLoader を使用することを提案しています。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 に答える