2012-10-23 20 views
6

Tôi đang cố chuyển đổi mã của mình bằng cách sử dụng con trỏ để sử dụng Trình tải con trỏ. Để hỗ trợ các phiên bản Android cũ hơn, tôi đã cài đặt Thư viện hỗ trợ và thay vì nhập android.content.CursorLoader, tôi đang nhập android.support.v4.content.CursorLoader. Bây giờ mã mà biên dịch tốt là ném hai lỗi. Lỗi đầu tiên là trên LoaderManager khi tôi thực hiện nó. Lỗi là: LoaderManager không thể được giải quyết thành một loại. Lỗi thứ hai là trên cuộc gọi đến initLoader. Lỗi này là: Phương thức initLoader (int, Bundle, LoaderManager.LoaderCallbacks) trong kiểu LoaderManager không áp dụng cho các đối số (int, Bundle, MyList). Dưới đây là mã của tôi:Lỗi khi tải Trình quản lý tải xuống khi sử dụng Thư viện hỗ trợ

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

tôi phần nào giải quyết điều này bằng cách nhập android.support.v4.app.LoaderManager. Nhưng tôi vẫn nhận được thông báo lỗi tương tự trong lời gọi initLoader. – Melanie

Trả lời

18

Để trả lại một android.support.v4.app.LoaderManager, bạn cần phải sử dụng getSupportLoaderManager(). Thật không may, phương pháp này không có sẵn cho ListActivity. Điều này có thể giúp bạn với điều đó: How to get LoaderManager in a ListActivity

+1

Cảm ơn rất nhiều! Tôi sẽ phải quyết định có nên quên Thư viện Hỗ trợ ngay bây giờ hay đi sâu vào Fragments hay không. Dum de dum dum – Melanie

+0

Ai đó có thể giải thích tại sao Thư viện Hỗ trợ không đi kèm với một lớp ListActivity có phương thức getSupportLoaderManager? Điều đó sẽ không làm cho việc sử dụng ListActivity với các trình nạp dễ dàng hơn nhiều không? – user672009

+0

Tôi nghĩ chỉ Google mới có thể trả lời câu hỏi đó. Đoán tốt nhất của tôi: họ có nhiều việc quan trọng hơn để thực hiện trên Thư viện hỗ trợ và triển khai hoạt động bình thường xử lý ListView không khó như vậy - ListActivity chỉ làm cho việc này trở nên dễ dàng hơn. – Marcelo

1

LoaderManager không thể giải quyết cho một loại. có thể được giải quyết thêm việc nhập khẩu:

import android.support.v4.app.LoaderManager; 

và như Marcelo chỉ ra, sử dụng getSupportLoaderManager() thay vì getLoaderManager()

Các vấn đề liên quan