如何将cursorLoader强制转换为Loader <Object>

jim*_*sis 5 java android casting android-loadermanager

希望简单的java问题我只是忘记或永远不会理解.我一直在玩Android 4.0中的Loaders.该计划正在按原样运作,但现在我正在寻找"下一个"部分.我想要一个标准的Cursor加载器和一个自定义的AsyncTaskLoader.我坚持第1部分试图将cursorLoader转换为Loader并返回它.

@Override
    //public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    public Loader<Object> onCreateLoader(int id, Bundle args) {

        if (id == LISTVIEWLOADER) {
            String[] projection = { RunnerTable.COLUMN_ID,
                    RunnerTable.COLUMN_NAME };
            CursorLoader cursorLoader = new CursorLoader(getActivity(),
                    FanContentProvider.CONTENT_URI, projection, null, null,
                    null);


            return cursorLoader;   //HERE IS THE PROBLEM
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

类型不匹配无法从CursorLoader转换为Loader.

我相信可以使它合作

public class MainFragment extends ListFragment implements
        //LoaderManager.LoaderCallbacks<Cursor>
        LoaderManager.LoaderCallbacks
Run Code Online (Sandbox Code Playgroud)

但不喜欢警告:

LoaderManager.LoaderCallbacks是一种原始类型.应参数化对泛型类型LoaderManager.LoaderCallbacks的引用

感谢您提供的任何帮助.

小智 30

即使这是一个老线程,它还没有完全回答.tch0106触及了这里的问题,但没有完全描述.

我刚刚遇到了同样的问题并在导入部分解决了它.简单来说:一起使用支持Loader,CursorLoader和LoaderCallbacks.

在android本地库和支持库中都可以找到几个类.不要将支持库与非支持库版本混合使用.

// Use these together
import android.support.v4.content.CursorLoader;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;

// Or use these, but don't mix and match
import android.content.CursorLoader;
import android.content.Loader;
import android.app.LoaderManager.LoaderCallbacks;
import android.widget.SimpleCursorAdapter;
Run Code Online (Sandbox Code Playgroud)


tch*_*106 7

检查你的导入,你可能会误用这些2:

import android.content.CursorLoader;
Run Code Online (Sandbox Code Playgroud)

import android.support.v4.content.CursorLoader;
Run Code Online (Sandbox Code Playgroud)


kos*_*osa 2

改变

public Loader<Object> onCreateLoader(int id, Bundle args) {
Run Code Online (Sandbox Code Playgroud)

  public Loader<? extends Object> onCreateLoader(int id, Bundle args) {
Run Code Online (Sandbox Code Playgroud)

第一条语句告诉jvm,返回类型是具体的Object。New 语句告诉 jvm 任何类型为Object.

请阅读本教程

  • 恐怕还是不行。返回类型与 LoaderManager.LoaderCallbacks&lt;Object&gt;.onCreateLoader(int, Bundle) 不兼容。 (2认同)