2012-03-29 19 views
25

Actualmente estoy tratando de aprender a usar los cargadores y tengo problemas para iniciar un cargador en mi actividad.Inicializando un cargador en una 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 LoaderManager tipo no es aplicable para los argumentos (int, null, ActivitySwitchActivity)

¿Alguien puede ayudarme con dónde me estoy equivocando?

Respuesta

80

Como puedo ver, utiliza la biblioteca supportV4. que apliquen cargador que debe hacer algunas cosas:

  1. ampliar su actividad a partir de la clase FragmentActivity
  2. método
  3. Uso getSupportLoaderManager en lugar de getLoaderManager

aquí es 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(); 
} 
} 
+1

¿Qué sucede si originalmente extendiste 'ListActivity'? No existe tal cosa como 'FragmentListActivity' que puedo incluir como reemplazo. –

+2

@MattHuggins ListActivity es principalmente una conveniencia para muy pocas cosas: usted mismo puede implementar la funcionalidad que falta (mantenga ListView como campo) – ataulm

1

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

+0

Siento no haber puesto mi código completo antes, solo un extracto. ¿Qué quieres decir con la interfaz LoaderManager.LoaderCallbacks? ¿Serían el onCreateLoader, onLoadFinished y onLoaderReset? porque los tengo en mi programa? –

1

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

8

Al utilizar cargadores con fragments uso:

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

Y cuando se utilizan cargadores con Activity uso:

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

Funcionó al revés para mí. – waseefakhtar