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:
- extiende tu actividad de la clase FragmentActivity
- 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.