Android getLoaderManager().initLoader()不';不接受';这';作为参数,类(ListFragment)实现LoaderManager.LoaderCallbacks<;光标>;
我在Android中使用SQLite时遇到问题。我使用的是Android getLoaderManager().initLoader()不';不接受';这';作为参数,类(ListFragment)实现LoaderManager.LoaderCallbacks<;光标>;,android,sqlite,android-loadermanager,android-listfragment,Android,Sqlite,Android Loadermanager,Android Listfragment,我在Android中使用SQLite时遇到问题。我使用的是ListFragment而不是ListActivity(如示例所示),因此我使用了ListFragment实现LoaderManager.LoaderCallbacks。然后,在ListFragment中的fillData()方法中: private void fillData() { // Fields from the database (projection) // Must include the _id colu
ListFragment
而不是ListActivity
(如示例所示),因此我使用了ListFragment
实现LoaderManager.LoaderCallbacks
。然后,在ListFragment
中的fillData()
方法中:
private void fillData() {
// Fields from the database (projection)
// Must include the _id column for the adapter to work
String[] from = new String[] { NotesSQLiteHelper.COLUMN_TITLE };
// Fields on the UI to which we map
int[] to = new int[] { R.id.label };
getLoaderManager().initLoader(0, null, this); //error
adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.notes_row, null, from, to, 0);
setListAdapter(adapter);
}
我得到一个错误:
The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks<D>) in the type LoaderManager is not applicable for the arguments (int, null, NotesActivity.ArrayListFragment)
类型LoaderManager中的方法initLoader(int,Bundle,LoaderManager.LoaderCallbacks)不适用于参数(int,null,NotesActivity.ArrayListFragment)
在标记行上,即使此
实现了LoaderManager.LoaderCallbacks
谢谢你的建议。有几件事需要注意(根据我最近与之斗争的经验):
getSupportLoaderManager().initLoader(LOADER_ID, null, this);
android.support.v4.app.FragmentActivity;
android.support.v4.app.LoaderManager;
android.support.v4.content.Loader;
希望这能帮助你。。。或者至少是其他人 您没有使用正确的
CursorLoader
和Loader
实现。
删除旧导入并使用以下导入:
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
但我在使用SherlockActionBar时也遇到了同样的问题:
由于我必须扩展SherlockListActivity,因此没有方法
getSupportLoadManager()
有什么想法吗
编辑:如果您不知道如何使用片段,请遵循。使用extends SherlockFragment创建一个新类,并将显示逻辑移到那里。使旧活动扩展SherlockFragmentActivity并显示新创建的SherlockFragment。这样我就可以工作了。感谢@JakeWharton 我通过使用SherlockListFragment(或者我想你也可以使用ListFragment)解决了这个问题,但是将它包含在活动中。我首先创建了一个通用FragmentHolderActivity类,如下所示: FragmentHolderActivity.java
public class FragmentHolderActivity extends SherlockFragmentActivity {
public static final String FRAGMENT_LAYOUT_RESOURCE_ID = "fragment_layout_resource_id";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Integer fragmentLayoutResourceId = getIntent().getIntExtra(FRAGMENT_LAYOUT_RESOURCE_ID, Integer.MAX_VALUE);
Assert.assertNotSame(fragmentLayoutResourceId, Integer.MAX_VALUE);
setContentView(fragmentLayoutResourceId);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return false;
default:
return super.onOptionsItemSelected(item);
}
}
}
然后需要为片段创建一个XML文件
您的\u列表\u fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.example.YourListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment" />
您只需告诉FragmentHolderActivity使用your_list_片段布局,该布局将依次加载YourListFragment.java
然后可以在YourListFragment.java中使用:getSherlockActivity().getSupportLoaderManager().initLoader(…)
不确定这是否是正确的方法,但它将我所有的逻辑保留在片段中,这很好。我在我的应用程序中使用ActionBarSherlock,我也遇到了这个问题,并完成了其他人在这个问题中讨论的所有步骤。然而,在尝试了所有建议的解决方案之后,我仍然有同样的问题
The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks<D>) in the type LoaderManager is not applicable for the arguments (int, null, this)
类型LoaderManager中的方法initLoader(int,Bundle,LoaderManager.LoaderCallbacks)不适用于参数(int,null,this)
问题是我已经陷入了一种期待,当我丢失了一些东西时,Eclipse会告诉我,它会告诉我,但不是以我习惯的方式。通常,Eclipse在其他情况下会告诉我,我缺少使某些东西工作的覆盖,但这里并没有直接说明这一点。我最终发现“LoaderManager.LoaderCallbacks”是一个问题,并意识到我没有回调它,因此这个错误实际上是一个非常有效的错误。添加基本覆盖解决了我的问题,并允许我继续前进
// Creates a new loader after the initLoader () call
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// do work
return null;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
// data is not available anymore, delete reference
adapter.swapCursor(null);
}
//在initLoader()调用之后创建一个新的加载程序
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
//工作
返回null;
}
@凌驾
public void onLoadFinished(加载器、光标数据){
适配器。swapCursor(数据);
}
@凌驾
公共void onLoaderReset(加载器){
//数据不再可用,请删除引用
适配器.swapCursor(空);
}
遇到了相同的问题。我的Minsdk版本是14,因此无法使用android.support.v4软件包
我是通过扩展LoaderCallbacks而不是LoaderManager.LoaderCallbacks来实现的,并使用这些包
import android.app.LoaderManager.LoaderCallbacks;
import android.content.CursorLoader;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter;
第三个论点解决了我的问题: 从 到
getLoaderManager().initLoader(0,null,(android.app.LoaderManager.LoaderCallbacks)this);
注:
(android.support.v4.app.LoaderManager.LoaderCallbacks)这个)
不起作用getSupportLoaderManager()或getSupportLoadManager()
不起作用我的错误是因为:
//import android.app.ListFragment; Error when doesnt import from support.v4
import android.support.v4.app.ListFragment;
在我的情况下,我必须让我的活动从android.support.v7.app包中扩展ActionBarActivity。那时我可以使用 getSupportLoaderManager().initLoader(0,null,this) 将导入更改为
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
和使用
getSupportLoaderManager().initLoader(0, null, this);
虽然很晚了,但也许可以帮助别人。
如果您在片段中使用loader maneger,并且您的最小api位于蜂巢下方
你应该用这个
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.app.Fragment;
对于初始化加载程序,请使用此代码
getActivity().getSupportLoaderManager().initLoader(/loader stuff*/);
希望这对您有所帮助。如果您尝试了上述所有方法,但“this”参数仍面临相同的错误,请执行以下步骤:
LoaderCallback。。。并将其粘贴到文本编辑器中
getSupportLoaderManager().initLoader(0, null, this);
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.app.Fragment;
getActivity().getSupportLoaderManager().initLoader(/loader stuff*/);
android.support.v4.app.LoaderManager loaderManager = getSupportLoaderManager();
loaderManager.initLoader(LOADER_ID, null, this);
//import android.support.v4.app.LoaderManager;
import android.app.LoaderManager;
import android.support.v4.app.NavUtils;
//import android.support.v4.content.CursorLoader;
import android.content.CursorLoader;
//import android.support.v4.content.Loader;
//import android.content.Loader;
getSupportLoaderManager().initLoader(LOADER_ID,null,this);
getLoaderManager().initLoader(LOADER_ID,null,this);
getLoaderManager().initLoader(0, null, this);
LoaderManager.getInstance(this).initLoader(0, null, this);
/**
* @deprecated Use
* {@link LoaderManager#getInstance(LifecycleOwner) LoaderManager.getInstance(this)}.
*/
getSupportLoaderManager().initLoader(id, null, this);
getSupportLoaderManager().initLoader(id, null, this);