2012-09-07 53 views
2

我与编译和运行从Android开发者网站为例挣扎:http://developer.android.com/guide/topics/ui/layout/listview.htmlAndroid示例将无法编译

这里是我的打字版本:

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>时,转换在执行期间失败。我不知道为什么 - 它看起来对我来说,该类满足尝试使用getSupportLoaderManager代替getLoaderManagerimplements <D>

回答

4

LoaderCallbacks合同。

+0

这应该是公认的答案。 Amandeep Jiddewar的解决方案将被视为一种解决方案,因为它可以解决对Android 3.0之前的设备的支持问题。 – TechNyquist

2

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

他们说,你需要使用,而不是getSupportLoaderManagergetLoaderManager

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.

从这个我可以断定,你需要使用一个FragmentActivity,并使用与它ListFragment