在 Activity 中初始化 Loader
Posted
技术标签:
【中文标题】在 Activity 中初始化 Loader【英文标题】:Initializing a Loader in an Activity 【发布时间】:2012-04-12 16:30:33 【问题描述】:我目前正在尝试学习如何使用加载器,但在我的活动中启动加载器时遇到了问题。
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)
谁能帮忙解决我哪里出错了?
【问题讨论】:
【参考方案1】:我可以看到您使用 supportV4 库。 所以要实现 Loader 你应该做一些事情:
-
从 FragmentActivity 类扩展您的活动
使用 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();
【讨论】:
如果你原来扩展ListActivity
怎么办?没有像 FragmentListActivity
这样的东西可以作为替代品。
@MattHuggins ListActivity 主要是为极少数事情提供便利——您可以自己实现缺少的功能(将 ListView 保留为字段)【参考方案2】:
当使用带有fragments
的加载器时,使用:
getLoaderManager().initLoader(0,null,this);
当使用 Activity
的加载器时:
getSupportLoaderManager().initLoader(0,null,this);
【讨论】:
【参考方案3】:getLoaderManager().initLoader(0, null, this);
的第三个参数应该是实现接口LoaderManager.LoaderCallbacks
的实例
所以你应该先实现接口。
【讨论】:
对不起,我之前没有发布完整的代码,只是摘录。 LoaderManager.LoaderCallbacks 接口是什么意思?它们会是 onCreateLoader、onLoadFinished 和 onLoaderReset 吗?因为我的程序中有它们?【参考方案4】:对于 AppCompatActivity,使用 getSupportLoaderManager().initLoader(0,null,this);
来初始化加载器。
【讨论】:
以上是关于在 Activity 中初始化 Loader的主要内容,如果未能解决你的问题,请参考以下文章
sass-loader 9.0.x & vue: ValidationError: Invalid options object。 Sass Loader 已使用选项对象初始化
是否有必要在每个 Activity 中初始化 Firebase Analytics?