2012-10-23 12 views
6

カーソルを使用するコードからCursorLoadersを使用するコードに変換しようとしています。古いバージョンのAndroidをサポートするために、サポートライブラリをインストールしました。android.content.CursorLoaderをインポートする代わりに、android.support.v4.content.CursorLoaderをインポートしています。今コンパイルされたコードは2つのエラーを投げています。最初のエラーは実装時にLoaderManagerにあります。エラーは次のとおりです。LoaderManagerを型に解決できません。 2番目のエラーは、initLoaderの呼び出しにあります。エラーは次のとおりです。LoaderManager型のメソッドinitLoader(int、Bundle、LoaderManager.LoaderCallbacks)は、引数(int、Bundle、MyList)には適用されません。ここに私のコードだ:サポートライブラリを使用している場合のLoaderManagerでのエラー

public class MyList extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> { 

private static final String[] PROJECTION = new String[] { "_id", "fieldname" }; 
private static final int LOADER_ID = 0; 
private static final String MYTABLE_BASEPATH = "MyTable_tbl"; 
private static final String AUTHORITY = "SQLData"; 
public static final Uri MY_URI = Uri.parse("content://" + AUTHORITY + "/" + MYTABLE_BASEPATH); 
private SimpleCursorAdapter mAdapter; 

@SuppressWarnings("deprecation") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent myData = getIntent(); 
    Bundle info = myData.getExtras(); 

    if (info != null){ 
     Cursor c; 
     String[] dataColumns = { "fieldname" }; 
     int[] viewIDs = { R.id.mylist1 }; 

     SimpleCursorAdapter adapter;    
     adapter = new SimpleCursorAdapter(this, R.layout.mylist, null, dataColumns, viewIDs, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 
     setListAdapter(adapter); 
     getLoaderManager().initLoader(0, info, this); 
    } 


} 

public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    String selection = "level = '" + args.getString("Level") + "'"; 
    return new CursorLoader(this, MY_URI, 
      PROJECTION, selection, null, null); 
} 

public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
    switch (loader.getId()) { 
     case LOADER_ID: 
     mAdapter.swapCursor(cursor); 
     break; 
    } 

} 

public void onLoaderReset(Loader<Cursor> loader) { 
    mAdapter.swapCursor(null); 

} 

}

+0

getSupportLoaderManager()を使用します。 は、インポートを追加し解決することができます。しかし、initLoader呼び出しでも同じエラーメッセージが表示されます。 – Melanie

答えて

18

android.support.v4.app.LoaderManagerを返すために、あなたはgetSupportLoaderManager()を使用する必要があります。 残念ながら、この方法はListActivityでは利用できません。 これはそれであなたを助けるかもしれない: How to get LoaderManager in a ListActivity

+1

ありがとう!今のところサポートライブラリを忘れるか、Fragmentsに潜入するかを決める必要があります。 Dum dum dum – Melanie

+0

Support LibraryにgetSupportLoaderManagerメソッドを備えたListActivityクラスが付属していない理由を説明できる人はいますか?ローダーでのListActivityの使用をもっと簡単にするでしょうか? – user672009

+0

私はGoogleがそれに答えることができると思います。私の推測では、Support Libraryでもっと重要なことがあり、ListViewを処理する通常のアクティビティを実装するのはそれほど難しくありません。ListActivityだけで簡単にできます。 – Marcelo

1

LoaderManagerはタイプに解決することはできません。

import android.support.v4.app.LoaderManager; 

をし、マルセロが指摘するように、私は部分的にandroid.support.v4.app.LoaderManagerをインポートすることで、これを解決する代わりにgetLoaderManager()