在活动中初始化加载程序

时间:2012-03-29 02:39:55

标签: android android-loadermanager

我目前正在尝试学习如何使用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给出了一个错误说明:

  

方法initLoader(int,Bundle,LoaderManager.LoaderCallbacks)   在类型LoaderManager中不适用于参数(int,   null,ActivitySwitchActivity)

任何人都可以帮我解决错误吗?

4 个答案:

答案 0 :(得分:82)

我可以看到你使用supportV4库。 所以要实现Loader,你应该做一些事情:

  1. 从FragmentActivity类扩展您的活动
  2. 使用getSupportLoaderManager方法而不是getLoaderManager
  3. 这是示例代码:

    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 :(得分:10)

使用fragments时使用的加载器:

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

使用Activity使用加载器的时候:

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

答案 2 :(得分:1)

getLoaderManager().initLoader(0, null, this);的第三个参数应该是实现接口LoaderManager.LoaderCallbacks的实例 所以你应该首先实现这个接口。

答案 3 :(得分:1)

对于AppCompatActivity,使用getSupportLoaderManager().initLoader(0,null,this);初始化加载程序。