我目前正在尝试学习如何使用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)
任何人都可以帮我解决错误吗?
答案 0 :(得分:82)
我可以看到你使用supportV4库。 所以要实现Loader,你应该做一些事情:
这是示例代码:
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);
初始化加载程序。