2012-10-23 19 views
6

Próbuję przekonwertować kod za pomocą kursorów na CursorLoaders. Aby obsługiwać starsze wersje Androida, zainstalowałem bibliotekę pomocy technicznej i zamiast importować plik android.content.CursorLoader, importuję plik android.support.v4.content.CursorLoader. Teraz kod, który skompilował dobrze, rzuca dwa błędy. Pierwszy błąd pojawia się w LoaderManager po jego wdrożeniu. Błąd: LoaderManager nie może zostać rozstrzygnięty na typ. Drugi błąd dotyczy połączenia z initLoader. Błąd: Metoda initLoader (int, Bundle, LoaderManager.LoaderCallbacks) w typie LoaderManager nie dotyczy argumentów (int, Bundle, MyList). Oto mój kod:Błąd w programie LoaderManager podczas korzystania z biblioteki pomocniczej

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

że częściowo rozwiązany tym celu importowania android.support.v4.app.LoaderManager. Ale wciąż otrzymuję ten sam komunikat o błędzie w wywołaniu initLoader. – Melanie

Odpowiedz

18

W celu zwrócenie android.support.v4.app.LoaderManager, trzeba użyć getSupportLoaderManager(). Niestety ta metoda nie jest dostępna dla ListActivity. To może pomóc z tym: How to get LoaderManager in a ListActivity

+1

Dziękuję bardzo! Będę musiał zdecydować, czy na razie zapomnieć Bibliotekę Wsparcia, czy zagłębić się w Fragmenty. Dum de dum dum – Melanie

+0

Czy ktoś może wyjaśnić, dlaczego Biblioteka Pomocy nie ma klasy ListActivity z metodą getSupportLoaderManager? Czy nie ułatwiłoby to korzystania z ListActivity z ładowarkami? – user672009

+0

Myślę, że tylko Google może na to odpowiedzieć. Moje najlepsze przypuszczenia: mają ważniejsze rzeczy do zrobienia w bibliotece pomocy technicznej, a wdrożenie normalnej aktywności, która obsługuje ListView, nie jest takie trudne - ListActivity po prostu ułatwia to. – Marcelo

1

LoaderManager nie mogą być rozwiązane do rodzaju. można rozwiązać dodanie import:

import android.support.v4.app.LoaderManager; 

i jak Marcelo wskazuje użyciu getSupportLoaderManager() zamiast getLoaderManager()

Powiązane problemy