progressbar loadermanager loadercallbacks initloader getloadermanager example cursorloader android android-loadermanager

android - loadermanager - Inicializando un cargador en una actividad



loading android (4)

Actualmente estoy tratando de aprender a usar los cargadores y tengo problemas para iniciar un cargador en mi actividad.

import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; public class ASwitchActivity extends Activity implements LoaderManager.LoaderCallbacks<SampleLoader.SampleLoaderResult> { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getLoaderManager().initLoader(0, null, this); } public Loader<SampleLoader.SampleLoaderResult> onCreateLoader(int id, Bundle args) { return new SampleLoader(getBaseContext(), account, "dog"); } public void onLoadFinished(Loader<SampleLoader.SampleLoaderResult> loader, SampleLoader.SampleLoaderResult out) { TextView t=(TextView)findViewById(R.id.testTV); t.setText("yay"); } public void onLoaderReset(Loader<SampleLoader.SampleLoaderResult> loader){ } }

Sin embargo Eclipse da un error que indica:

El método initLoader (int, Bundle, LoaderManager.LoaderCallbacks) en el tipo LoaderManager no es aplicable para los argumentos (int, null, ActivitySwitchActivity)

¿Alguien puede ayudarme con lo que me va mal?


Como puedo ver utilizas la librería supportV4. Así que para implementar Loader deberías hacer algunas cosas:

  1. extiende tu actividad de la clase FragmentActivity
  2. Utilice el método getSupportLoaderManager en lugar de getLoaderManager

Aquí está el código de ejemplo:

import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.widget.Toast; public class MyActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Object> { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getSupportLoaderManager().initLoader(0, null, this); } @Override public Loader<Object> onCreateLoader(int i, Bundle bundle){ return null; // TODO } @Override public void onLoadFinished(Loader loader, Object o) { Toast.makeText(this, "onLoadFinished", Toast.LENGTH_SHORT).show(); } @Override public void onLoaderReset(Loader loader) { Toast.makeText(this, "onLoaderReset", Toast.LENGTH_SHORT).show(); } }


Cuando se usan cargadores con fragments usar:

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

Y cuando se usan cargadores con uso de Activity :

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


El tercer parámetro para getLoaderManager().initLoader(0, null, this); debe ser una instancia que implemente la interfaz LoaderManager.LoaderCallbacks Por lo tanto, LoaderManager.LoaderCallbacks debe implementar la interfaz.


Para AppCompatActivity use getSupportLoaderManager().initLoader(0,null,this); para inicializar el cargador.