【发布时间】:2017-02-19 06:25:21
【问题描述】:
我正在努力从电话中获取联系人,为此我使用了LoaderCallbacks<Cursor>,我创建了一个名称为FetchContacts 的新类并实现了loaderManager。现在我想在创建该类 loaderManager 的对象时自动初始化。
FetchContacts
public class FetchContacts implements LoaderManager.LoaderCallbacks<Cursor> {
private Context context;
FetchContacts(Context ctx){
context = ctx;
getLoaderManager().initLoader(0, null, this); // Error: Undefined method
}
// Reset of code like override methods.
MainActivity
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FetchContacts fetchContacts = new FetchContacts(this);
}
}
我知道错误的原因是因为FetchContacts 不是从 Activity 类扩展而来的。是否需要从 Activity 类扩展它,或者是否有其他方法可以从 MainActivity 调用它?
【问题讨论】:
-
您可以将
LoaderManager作为FetchContacts构造函数中的参数传递,但我不确定您为什么要这样做。 stackoverflow.com/a/13433085 -
因为我想在需要的时候获取联系人。如果我不能打电话给
initLoader(),那么这个类就没用了。有没有其他方法可以做到这一点。我是安卓新手。传递loaderManager是个好办法? -
您不需要
Loader来获取通讯录。Loaders 主要用于向 UI 组件传递内容更新、更改等,例如Activity。只要您可以访问Context,您就可以随时自行查询联系人提供程序。 stackoverflow.com/q/12562151 要专门回答您的最后一个问题,不,使用LoaderManager这样的方式并不是真正的好方法。 -
但我发现
cursorLoader不错Note: All the examples in this lesson use a CursorLoader to retrieve data from the Contacts Provider. A CursorLoader runs its query on a thread that's separate from the UI thread. This ensures that the query doesn't slow down UI response times and cause a poor user experience这是来自android 开发者developer.android.com/training/contacts-provider/… -
是的,当我去搜索那个例子时,我想这就是你从那里得到的。正如我所说,
Loaders 用于将结果传递给Activity或Fragment。如果这些是您需要结果的唯一地方,那么就不需要单独的课程;只需在您需要的任何Activity/Fragment中实施必要的Loader设置。如果“我想在需要的时候获取联系人”,你的意思是你试图在其他地方使用那个Loader或其结果,那么你会很糟糕。
标签: android android-loadermanager