GetLoaderManager (). InitLoader () no acepta 'this' como argumento aunque la clase (ListFragment) implementa LoaderManager.LoaderCallbacks <Cursor>

Tengo problemas para seguir una guía sobre el uso de SQLite en Android. Estoy utilizando un ListFragment lugar de ListActivity (como en el ejemplo), así que tengo el ListFragment implementar LoaderManager.LoaderCallbacks<Cursor> lugar. A continuación, en el método fillData() en el ListFragment :

 private void fillData() { // Fields from the database (projection) // Must include the _id column for the adapter to work String[] from = new String[] { NotesSQLiteHelper.COLUMN_TITLE }; // Fields on the UI to which we map int[] to = new int[] { R.id.label }; getLoaderManager().initLoader(0, null, this); //error adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.notes_row, null, from, to, 0); setListAdapter(adapter); } 

Tengo el error:

 The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks<D>) in the type LoaderManager is not applicable for the arguments (int, null, NotesActivity.ArrayListFragment) 

En la línea marcada aunque this implemente LoaderManager.LoaderCallbacks<Cursor> .

Gracias por cualquier idea.

No está utilizando las implementaciones correctas de CursorLoader y Loader . Elimine sus importaciones antiguas y utilice estas:

 import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; 

Pero tengo el mismo problema usando SherlockActionBar: Como tengo que extender SherlockListActivity no hay método getSupportLoadManager() .

¿Ideas sobre esto?

EDIT: siga este tutorial si no sabe cómo usar fragmentos. Cree una nueva clase con extends SherlockFragment y mueva su lógica de visualización allí. Haga que su antigua actividad amplíe SherlockFragmentActivity y muestre el SherlockFragment recién creado. De esta manera lo conseguí trabajando. Gracias a @JakeWharton!

Algunas cosas a tener en cuenta (de mi reciente experiencia luchando con esto):

  1. Si su minSDK está configurado a menos de 11 (es decir, nivel 10 para Gingerbread) y está utilizando el Support Pack para comprobar la compatibilidad con versiones anteriores, asegúrese de usar

     getSupportLoaderManager().initLoader(LOADER_ID, null, this); 
  2. Usted mencionó esto cuando dijo que está usando ListFragment, pero se repite: No extender Actividad, de lo contrario el paquete de soporte no funcionará. En su lugar, expanda la clase FragmentActivity o la clase ListFragment.

  3. Para sus importaciones, asegúrese de que está utilizando las versiones correctas si su minSDK <11:

      android.support.v4.app.FragmentActivity; android.support.v4.app.LoaderManager; android.support.v4.content.Loader; 

Espero que esto te ayude … o al menos a alguien más …

Lanzar el tercer argumento resolvió el problema en mi caso:

de

  getLoaderManager().initLoader(0, null, this); 

a

  getLoaderManager().initLoader(0, null, (android.app.LoaderManager.LoaderCallbacks<Cursor>) this); 

Nota:

  1. MinSdk era 8 y yo estaba usando la biblioteca de soporte v4.
  2. (android.support.v4.app.LoaderManager.LoaderCallbacks<Cursor>) this) no funcionó.
  3. getSupportLoaderManager() or getSupportLoadManager() no funcionaron.
  4. Este código fue dentro de la actividad no fragmento

Mi error fue porque:

 //import android.app.ListFragment; Error when doesnt import from support.v4 import android.support.v4.app.ListFragment; 

Es tarde pero quizá ayude a alguien.
Si usted utiliza el maneger del cargador en el fragmento y usted min api está debajo de HONEYCOMB
Deberías usar estas importaciones

 import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.support.v4.app.Fragment; 

Y para iniciar cargador utilizar este código

 getActivity().getSupportLoaderManager().initLoader(/loader stuff*/); 

Espero que esto ayude a alguien.

Cambie sus importaciones a

 import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; 

y use

 getSupportLoaderManager().initLoader(0, null, this); 

Estoy usando ActionBarSherlock con mi aplicación y yo también estaba corriendo en este problema y trabajado a través de todos los pasos discutidos por otros en esta cuestión. Sin embargo, seguía teniendo el mismo problema después de probar todas las resoluciones sugeridas.

 The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks<D>) in the type LoaderManager is not applicable for the arguments (int, null, this) 

El problema era que había caído en la espera de Eclipse para decirme cuando me faltaba algo y me estaba diciendo eso, pero no de la manera que estaba acostumbrado. Típicamente Eclipse en otros casos me diría que estoy perdiendo las anulaciones para hacer algo funcionar pero no es directamente decir eso aquí. Finalmente me recogió en el "LoaderManager.LoaderCallbacks" siendo el problema y se dio cuenta de que no tenía devoluciones de llamada por lo que este error fue en realidad un error muy válido. La adición de las sustituciones básicas resolvió mi problema y me permitió seguir adelante.

 // Creates a new loader after the initLoader () call @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { // do work return null; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { adapter.swapCursor(data); } @Override public void onLoaderReset(Loader<Cursor> loader) { // data is not available anymore, delete reference adapter.swapCursor(null); } 

En mi caso tuve que tener mi actividad extender ActionBarActivity desde el paquete android.support.v7.app. Entonces pude usar

GetSupportLoaderManager (). InitLoader (0, null, this);

Conseguí alrededor de esto usando un SherlockListFragment (o usted podría utilizar ListFragment, supongo), pero lo han contenido dentro de una actividad. Primero creé una clase genérica de FragmentHolderActivity que se parece a esto:

FragmentHolderActivity.java

 public class FragmentHolderActivity extends SherlockFragmentActivity { public static final String FRAGMENT_LAYOUT_RESOURCE_ID = "fragment_layout_resource_id"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Integer fragmentLayoutResourceId = getIntent().getIntExtra(FRAGMENT_LAYOUT_RESOURCE_ID, Integer.MAX_VALUE); Assert.assertNotSame(fragmentLayoutResourceId, Integer.MAX_VALUE); setContentView(fragmentLayoutResourceId); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return false; default: return super.onOptionsItemSelected(item); } } } 

A continuación, debe crear un archivo XML para su fragmento.

Your_list_fragment.xml

 <?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:name="com.example.YourListFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/fragment" /> 

Y aquí está el código que usas para iniciar el fragmento:

  Intent intent = new Intent(); intent.setClass(this, FragmentHolderActivity.class); intent.putExtra(FragmentHolderActivity.FRAGMENT_LAYOUT_RESOURCE_ID, R.layout.your_list_fragment); startActivity(intent); 

Usted acaba de decir el FragmentHolderActivity para utilizar el layout your_list_fragment, que a su vez carga el YourListFragment.java

A continuación, puede utilizar: getSherlockActivity().getSupportLoaderManager().initLoader(...) en YourListFragment.java

No estoy seguro de si este es el enfoque correcto , pero mantiene toda mi lógica en Fragmentos, que es agradable.

Funcionó en el mismo problema. Mi minSdkVersion es 14, por lo que no se puede utilizar el paquete android.support.v4.

Lo calculé extendiendo LoaderCallbacks, en lugar de LoaderManager.LoaderCallbacks y usar estos paquetes

 import android.app.LoaderManager.LoaderCallbacks; import android.content.CursorLoader; import android.database.Cursor; import android.widget.SimpleCursorAdapter; 

Si ha intentado todos los métodos anteriores y sigue enfrentando el mismo error con el parámetro "this", siga estos pasos:

  1. Vaya a la configuración y habilite las importaciones al momento (por defecto, estará habilitado y puede hacerlo usando las teclas Alt + Enter).

  2. Cortar todo el código de la actividad que había implementado
    LoaderCallback … y pegarlo en un editor de texto.

  3. Finalmente, copiar todo el código de esa actividad desde el editor de texto donde se ha pegado, sin ningún comando de importación (sólo el código de la clase / actividad).

  4. Obtendrás muchos errores ya que no has importado nada todavía. Solo presiona Alt + Enter dondequiera que estés recibiendo los errores y tus bibliotecas serán importadas automáticamente. Nota: Elija la biblioteca android.app … para CursorLoaders.

  • Algunas preguntas sobre los cursores de la base de datos SQLite en Android
  • Sqlite - en rebaja
  • ¿En Android puedo hacer una consulta SQL en un cursor?
  • ¿Cuándo se ejecuta SQLiteOpenHelper onCreate () / onUpgrade ()?
  • Consulta de eliminación de Android
  • ¿El cursor SQLite de Android carga todos los registros en la memoria a la vez?
  • Sqlite Database - ¿Cómo guardar la imagen tomada de la intención de la cámara, así como hashmap a sqlite para recuperar más tarde?
  • Obtener datos de una base de datos vs obtener datos de un mapa hash
  • Compruebe si la consulta SQL ha tenido éxito en Android SQLite
  • Parámetros de Android SQLite rawquery
  • ¿Cómo obtener todos los nombres de tablas en la base de datos Android sqlite?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.