web-dev-qa-db-fra.com

Initialisation d'un chargeur dans une activité

J'essaie actuellement d'apprendre à utiliser les chargeurs et j'ai du mal à démarrer un chargeur dans mon activité.

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){

  }
}   

Cependant Eclipse donne une erreur indiquant:

La méthode initLoader (int, Bundle, LoaderManager.LoaderCallbacks) du type LoaderManager ne s'applique pas aux arguments (int, null, ActivitySwitchActivity)

Quelqu'un peut-il m'aider à comprendre où je me trompe?

28
d.mc2

Comme je peux le voir, vous utilisez la bibliothèque supportV4. Donc, pour implémenter Loader, vous devez faire certaines choses:

  1. étendre votre activité depuis la classe FragmentActivity
  2. Utilisez la méthode getSupportLoaderManager au lieu de getLoaderManager

voici un exemple de code:

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();
}
}
83
mig35

Lorsque vous utilisez des chargeurs avec fragments utilisez:

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

Et lorsque vous utilisez des chargeurs avec Activity utilisez:

getSupportLoaderManager().initLoader(0,null,this);
10
Krishna Agarwal

Le troisième paramètre pour getLoaderManager().initLoader(0, null, this); doit être une instance qui implémente l'interface LoaderManager.LoaderCallbacks Vous devez donc implémenter l'interface en premier.

1
Changwei Yao

Pour AppCompatActivity, utilisez getSupportLoaderManager().initLoader(0,null,this); pour initialiser le chargeur.

1
SriMaharshi Manchem