2012-03-29 8 views
25

Ich versuche derzeit, die Verwendung von Loadern zu erlernen und habe Probleme beim Starten eines Loaders in meiner Aktivität.Initialisieren eines Loaders in einer Aktivität

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

    } 
} 

Allerdings gibt Eklipse einen Fehler, der besagt:

Die Methode initLoader (int, Bundle, LoaderManager.LoaderCallbacks) in der Art LoaderManager nicht anwendbar für die Argumente ist (int, null, ActivitySwitchActivity)

Kann mir jemand helfen, wo ich falsch liege?

Antwort

80

Wie ich sehen kann, verwenden Sie supportV4-Bibliothek. So Loader implementieren Sie einige Dinge tun sollten:

  1. Ihre Aktivität von FragmentActivity Klasse
  2. Verwenden getSupportLoaderManager Methode statt getLoaderManager erweitern

hier ist ein Beispielcode:

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

Was ist, wenn Sie ursprünglich 'ListActivity' erweitert haben? Es gibt keine "FragmentListActivity", die ich als Ersatz einfügen kann. –

+2

@MattHuggins ListActivity ist hauptsächlich eine Bequemlichkeit für sehr wenige Dinge - Sie können die fehlende Funktionalität selbst implementieren (ListView als Feld behalten) – ataulm

1

Der dritte Parameter für getLoaderManager().initLoader(0, null, this); sollte eine Instanz sein, die Schnittstelle implementieren Also sollten Sie die Schnittstelle zuerst implementieren.

+0

Leider habe ich früher meinen kompletten Code schrieb nicht nur einen Ausschnitt. Was meinen Sie mit der LoaderManager.LoaderCallbacks-Schnittstelle? Wären sie onCreateLoader, onLoadFinished und onLoaderReset? weil ich sie in meinem Programm habe? –

1

Verwenden Sie für AppCompatActivity getSupportLoaderManager().initLoader(0,null,this); zum Initialisieren des Loaders.

8

Wenn Lader mit fragments Verwendung mit:

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

Und wenn Lader mit Activity Verwendung mit:

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

Es funktionierte andersherum für mich. – waseefakhtar

Verwandte Themen