Инициализация загрузчика в действии - PullRequest
28 голосов
/ 29 марта 2012

В настоящее время я пытаюсь узнать, как использовать Loaders, и у меня возникают проблемы с запуском Loader в моей деятельности.

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

  }
}   

Однако Eclipse выдает ошибку, сообщающую:

TheМетод initLoader (int, Bundle, LoaderManager.LoaderCallbacks) в типе LoaderManager не применим для аргументов (int, null, ActivitySwitchActivity)

Может кто-нибудь помочь с тем, где я иду неправильно?

Ответы [ 4 ]

83 голосов
/ 29 марта 2012

Как я вижу, вы используете библиотеку supportV4. Итак, чтобы реализовать Loader, вы должны сделать несколько вещей:

  1. продлите свою активность из класса FragmentActivity
  2. Используйте метод getSupportLoaderManager вместо getLoaderManager

вот пример кода:

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();
}
}
10 голосов
/ 08 ноября 2016

При использовании загрузчиков с fragments используйте:

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

А при использовании загрузчиков с Activity используйте:

getSupportLoaderManager().initLoader(0,null,this);
1 голос
/ 11 августа 2016

Для AppCompatActivity используйте getSupportLoaderManager().initLoader(0,null,this); для инициализации загрузчика.

1 голос
/ 29 марта 2012

Третий параметр для getLoaderManager().initLoader(0, null, this); должен быть экземпляром, который реализует интерфейс LoaderManager.LoaderCallbacks Таким образом, вы должны сначала реализовать интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...