28

我目前正在尝试学习如何使用加载器,但在我的活动中启动加载器时遇到了麻烦。

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 给出了一个错误说明:

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

谁能帮忙解决我哪里出错了?

4

4 回答 4

83

如我所见,您使用 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();
}
}
于 2012-03-29T03:59:46.500 回答
11

使用装载机时fragments

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

当使用加载器时Activity

getSupportLoaderManager().initLoader(0,null,this);
于 2016-11-08T10:25:55.133 回答
1

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

于 2012-03-29T03:08:23.077 回答
1

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

于 2016-08-11T09:51:35.283 回答