2014-09-30 90 views
8

Android文檔說:此方法在API級別11棄用「managedQuery」的合適替代者是什麼?

被廢棄這是代碼:

class GridViewActivity_ extends  Activity 
    { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.gridview); 

    GridView gv = (GridView)findViewById(R.id.gridview); 

    Cursor c = managedQuery(Contacts.CONTENT_URI, 
      null, null, null, Contacts.DISPLAY_NAME); 

    String[] cols = new String[]{Contacts.DISPLAY_NAME}; 
    int[] views = new int[] {android.R.id.text1}; 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      android.R.layout.simple_list_item_1, 
      c, cols, views); 
    gv.setAdapter(adapter); 
} 
} 

如何替換此代碼,而不是過時的代碼?

對於活動,而不是片段......

+0

光標裝載機 的http://開發商.android.com/reference/android/content/CursorLoader.html – 2014-09-30 12:26:12

回答

2

根據這個偉大的tutorial

public class GridViewActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> 
{ 
    private SimpleCursorAdapter mAdapter; 

    @Override 
public Loader<Cursor> onCreateLoader(int p1, Bundle p2) 
{ 
    return new CursorLoader(this, Contacts.CONTENT_URI, null, null, null, Contacts.DISPLAY_NAME); 
} 

@Override 
public void onLoadFinished(Loader<Cursor> p1, Cursor cursor) 
{ 
    mAdapter.swapCursor(cursor); 
} 

@Override 
public void onLoaderReset(Loader<Cursor> cursor) 
{ 
    mAdapter.swapCursor(null); 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    // TODO: Implement this method 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gridview);  
    GridView gv = (GridView)findViewById(R.id.gridview); 
    String[] cols = new String[]{Contacts.DISPLAY_NAME}; 
    int[] views = new int[]{android.R.id.text1}; 
    mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, cols,views, 0); 
    gv.setAdapter(mAdapter); 
    getSupportLoaderManager().initLoader(0, null, this); 
} 

} 
17

你可以看到這個鏈接:Deprecated ManagedQuery() issue

Cursor cursor = getContentResolver().query(contentUri, null, null, null, Contacts.DISPLAY_NAME); 
+1

只需注意一點。這需要4個參數,managedQuery只需要3個。我一直忽略其中的一個null! – 2016-05-14 09:44:23

+0

那應該被接受的答案 – androidXP 2017-11-16 13:20:18

相關問題