getLoaderManager()。initLoader()不接受 '这个' 作为

2019-06-25 16:59发布

我有以下故障导向上的Android使用SQLite。 我使用ListFragment代替ListActivity (如示例中),所以我有ListFragment实施LoaderManager.LoaderCallbacks<Cursor>代替。 然后,在fillData()中所述方法ListFragment

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)

上标记行,即使this实施LoaderManager.LoaderCallbacks<Cursor>

谢谢你的任何想法。

Answer 1:

您没有使用权实现CursorLoaderLoader 。 删除旧的进口和使用这些的:

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()

在这个任何想法?

编辑:遵循本教程 ,如果你不知道如何使用碎片。 创建一个新的类具有延伸SherlockFragment有移动你的显示逻辑。 让你的老年活动延长SherlockFragmentActivity并显示新创建的SherlockFragment。 这样,我得到它的工作。 感谢@JakeWharton!



Answer 2:

有几件事情需要注意的(从我最近的经验,用这个作战):

  1. 如果您minSDK设定为小于11(即,姜饼10级),你正在使用的支持包的向后兼容性,请确保您使用

     getSupportLoaderManager().initLoader(LOADER_ID, null, this); 
  2. 不要延长活动,否则支持包将无法工作:当你说你正在使用ListFragment,但值得重复你刚才提到这一点。 相反,延伸FragmentActivity类或ListFragment类。

  3. 为了您的进口,确保您使用的是正确的版本,如果你minSDK <11:

      android.support.v4.app.FragmentActivity; android.support.v4.app.LoaderManager; android.support.v4.content.Loader; 

希望这可以帮助你......或者至少别人...



Answer 3:

铸造第三个参数解决了我的情况的问题:

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

 getLoaderManager().initLoader(0, null, (android.app.LoaderManager.LoaderCallbacks<Cursor>) this);

注意:

  1. minSdk是8和我使用支持库V4。
  2. (android.support.v4.app.LoaderManager.LoaderCallbacks<Cursor>) this)没有工作。
  3. getSupportLoaderManager() or getSupportLoadManager()没有工作。
  4. 此代码是内部活动不片断


Answer 4:

这晚,但也许帮助一些之一。
如果你使用装载机maneger的片段和你分钟API低于蜂窝
您shuld使用进口

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*/);

希望这有助于一些之一。



Answer 5:

改变你的进口

import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;

和使用

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


Answer 6:

我的错误是东阳这样的:

//import android.app.ListFragment; Error when doesnt import from support.v4
import android.support.v4.app.ListFragment;


Answer 7:

在我来说,我必须有我的活动从android.support.v7.app包扩展ActionBarActivity。 当时我能够用

getSupportLoaderManager()initLoader(0,null,则此)。



Answer 8:

我使用ActionBarSherlock与我的应用程序,我也也陷入了这个问题,并努力通过其他人在这个问题讨论的所有步骤。 但是我继续有尝试所有建议的解决方案后,同样的问题。

The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks<D>) in the type LoaderManager is not applicable for the arguments (int, null, this)

这个问题是我已经陷入期待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);
}


Answer 9:

我在那里我AsyncTaskLoader不回我列出了类似的问题,但我的决心是改变从.initLoader到.restartLoader呼叫。

所以,我其实从来没有所谓.initLoader,只是马上打电话.restartLoader。

我在片段和每一个退出了片段的时间内,具有onListItemClick监听器,并重新加载onListItemClick并通过它保持崩溃的应用程序导航。

它可能只是具体到我的应用程序,但希望它可以帮助别人,如果他们有片段堆栈中重载的问题。

这是在我的应用程序文件管理器部分,它是特定于单击要装入的片段多个onListItemClicks的一部分。



Answer 10:

我周围这让使用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文件。

your_list_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" />

下面是用来启动片段中的代码:

    Intent intent = new Intent();
    intent.setClass(this, FragmentHolderActivity.class);
    intent.putExtra(FragmentHolderActivity.FRAGMENT_LAYOUT_RESOURCE_ID, R.layout.your_list_fragment);
    startActivity(intent);

你只要告诉FragmentHolderActivity使用your_list_fragment布局,这反过来加载YourListFragment.java

然后,您可以使用: getSherlockActivity().getSupportLoaderManager().initLoader(...)在YourListFragment.java

不知道这是正确的做法,但它保留我的所有逻辑片段,这是很好的。



Answer 11:

遇到同样的问题。 我的minSdkVersion是14,所以不能用android.support.v4包。

我想它通过扩展LoaderCallbacks,而不是LoaderManager.LoaderCallbacks和使用这些包

import android.app.LoaderManager.LoaderCallbacks;  
import android.content.CursorLoader;  
import android.database.Cursor;  
import android.widget.SimpleCursorAdapter;


Answer 12:

如果你已经尝试了所有的上述方法仍然面临着同样的错误的“这个”参数,然后按照下列步骤:

  1. 进入设置并启用的飞行选择进口。(默认情况下它会被启用,您可以通过使用Alt + Enter键键做到这一点)。

  2. 切其已经实施该活动的整个代码
    LoaderCallback ......然后将其粘贴在文本编辑器。

  3. 然后,在最后一个副本,从那里你已经粘贴文本编辑器,活动的全部代码,没有任何进口的命令。(类/活动的只有代码)。

  4. 你会得到很多,你有没有进口又错误的。 只要按下Alt + Enter键无论你得到的错误,它的库文件会被自动导入。 注:选择android.app ...为CursorLoaders库。



Answer 13:

试试这些2号线,将工作

android.support.v4.app.LoaderManager loaderManager = getSupportLoaderManager();

loaderManager.initLoader(LOADER_ID, null,  this);


Answer 14:

我使用minSDK 27有同样的问题,我试着投像@Dexter建议,但给了一个错误,说cannot be cast to android.app.LoaderManager$LoaderCallbacks ,所以后来我试图用不同的import语句和这个工作。 我注释掉的v4版本,这就是我现在已经和应用工作:

//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;

不太清楚何时/如何v4版本是进口的。



Answer 15:

0

长牺牲后,我如果您使用的片段就用这个代码得到了这个解决方案。

getActivity().getSupportLoaderManager().initLoader(1, null, YourActivity.this);

我希望这有助于您



文章来源: getLoaderManager().initLoader() doesn't accept 'this' as argument though the class (ListFragment) implements LoaderManager.LoaderCallbacks