2012-10-23 20 views
6

我想將我的代碼從使用遊標轉換爲使用CursorLoaders。爲了支持舊版本的Android,我安裝了支持庫,而不是導入android.content.CursorLoader,我導入了android.support.v4.content.CursorLoader。現在編譯好的代碼會拋出兩個錯誤。第一個錯誤是在我執行LoaderManager時出現的。錯誤是:LoaderManager無法解析爲類型。第二個錯誤是對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

我部分地通過導入android.support.v4.app.LoaderManager解決了這個。但是我仍然在initLoader調用中收到相同的錯誤消息。 – Melanie

回答

18

爲了返回android.support.v4.app.LoaderManager,你需要使用getSupportLoaderManager()。 不幸的是,這種方法不適用於ListActivity。 這可能幫你: How to get LoaderManager in a ListActivity

+1

非常感謝!我現在必須決定是否忘記支持庫,或者跳入片段。 Dum de dum dum – Melanie

+0

有人可以解釋爲什麼Support Library沒有帶有具有getSupportLoaderManager方法的ListActivity類嗎?這不會讓使用ListActivity的加載器更容易嗎? – user672009

+0

我認爲只有Google可以回答。我最好的猜想是:他們在支持庫上有更重要的事情要做,並且實現處理ListView的正常活動並不那麼困難 - ListActivity使得它更容易。 – Marcelo

1

LoaderManager不能被解析爲一個類型。 可以解決增加進口:

import android.support.v4.app.LoaderManager; 

和馬塞洛一樣指出,使用getSupportLoaderManager()代替getLoaderManager()