2

我正在努力编译和运行来自 Android 开发者网站的示例:http: //developer.android.com/guide/topics/ui/layout/listview.html

这是我输入的版本:

package com.chex.control;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListAdapter;
import android.support.v4.app.LoaderManager;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v4.content.Loader;
import android.support.v4.content.CursorLoader;

public class ListViewExample extends ListActivity implements
LoaderManager.LoaderCallbacks<Cursor> {

    Cursor cursor;

    // database columns that we will retreive
    final String[] PROJECTION = new String[] { ContactsContract.Data._ID,
            ContactsContract.Data.DISPLAY_NAME };

    final String SELECTION = "((" + ContactsContract.Data.DISPLAY_NAME
            + " NOTNULL AND (" + ContactsContract.Data.DISPLAY_NAME
            + " != ''))";

    SimpleCursorAdapter adapter=null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String[] fromColumns = { ContactsContract.Data.DISPLAY_NAME };

        int[] toViews = { android.R.id.text1 };


        ListAdapter adapter = new SimpleCursorAdapter(this, // context
                android.R.layout.simple_list_item_1, cursor, // cursor to bind
                // to
                fromColumns, // array of cursor
                // columns to
                // bind to
                toViews, 0); // parallel
        // array
        // of
        // which
        // template
        // objects
        // to
        // bind
        // to
        // cursor
        // columns

        setListAdapter(adapter);

        // ******* THE FOLLOWING LINE WON'T COMPILE **************
        getLoaderManager().initLoader(0, null,  this);

    }

    @Override
    public void setListAdapter(ListAdapter adapter) {
        // TODO Auto-generated method stub
        super.setListAdapter(adapter);
    }

    /**
     * create and return a CursorLoader that will take care of creating a Curso
     * for the data being displayed.
     */
    @Override
    public Loader onCreateLoader(int arg0, Bundle arg1) {
        CursorLoader loader = new CursorLoader(this,
                ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null,
                null);

        return loader;
    }



    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        // TODO Auto-generated method stub

    }

}

Eclipse 给出编译错误:
The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks<D>) in the type LoaderManager is not applicable for the arguments (int, null, ListViewExample).

显然,演员不想这样是不是例子错了?如果我只是从 Android 开发者网站剪切和粘贴,我也会遇到同样的问题。

当我在代码中更改<Cursor>为时<D>,强制转换在执行过程中失败。我不知道为什么——在我看来,班级履行了LoaderCallbacks合同implements <D>

4

3 回答 3

4

尝试使用getSupportLoaderManager而不是getLoaderManager.

于 2012-09-07T03:03:43.350 回答
2

看看这里http://developer.android.com/tools/extras/support-library.html

他们说你需要使用getSupportLoaderManager而不是getLoaderManager

To manage your fragments and loaders, you must use the methods FragmentActivity.getSupportFragmentManager() and FragmentActivity.getSupportLoaderManager() (instead of the getFragmentManager() and getLoaderManager() methods).

http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html#getSupportLoaderManager()

但是您没有使用 FragmentActivity 并且您根本没有使用此代码?它甚至需要在那里吗?

While the LoaderManager API was introduced in HONEYCOMB, a version of the API at is also available for use on older platforms through FragmentActivity.

由此我可以得出结论,您需要使用 a FragmentActivity,并使用 a ListFragment

于 2012-09-07T03:11:09.997 回答
0

看起来您导入了错误的 LoadManager,即android.support.v4.app.LoaderManager;尝试导入这个:android.app.LoaderManager它可能会起作用。

文档:http: //developer.android.com/reference/android/app/LoaderManager.html

于 2012-09-07T03:10:03.630 回答