Android SimpleCursorAdapter和CursorLoader

约翰

我有一个Android列表布局。基本上它将在屏幕上列出用户的信息。请帮助我解释listView如何设置数据。SimpleCursorAdapter如何与Loader链接

这是代码:

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

    private SimpleCursorAdapter adapter;
    private final int Adapter_AccountName = 1;  
    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_chatlist);   

        adapter = new SimpleCursorAdapter(this, 
                R.layout.main_list_item, 
                null, 
                new String[]{DataProvider.COL_NAME, DataProvider.COL_COUNT,DataProvider.PROFILE_COL_LASTMSGAT,DataProvider.PROFILE_COL_IMAGE},  
                new int[]{R.id.text1, R.id.text2,R.id.text3,R.id.avatar},
                0);

        adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

            @Override
            public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
                switch(view.getId()) {
                // here can add one more line in the main page for each account
                case R.id.text2:
                    int count = cursor.getInt(columnIndex);
                    if (count > 0) {
                        ((TextView)view).setText(String.format("%d new message%s", count, count==1 ? "" : "s"));
                    }
                    return true;    
                case R.id.text3: 
                    String lastUpdate = cursor.getString(columnIndex);
                    Date d = DbDatetimeUtility.getDate(cursor.getString(columnIndex));  
                    Date t = DbDatetimeUtility.getCurrentDate();
                    ((TextView)view).setText(DbDatetimeUtility.returnDifferentTime(d,t)); 
                    return true;    
                case R.id.avatar:
                    byte[] imageByte = cursor.getBlob(columnIndex);
                    ((ImageView)view).setImageBitmap(DbBitmapUtility.getResizedBitmap(DbBitmapUtility.getImage(imageByte),125,125));
                    return true;
                }
                return false;
            }
        });

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(false);

        //final ListView listView = getListView();
        final ListView listView = getListView(); 

        listView.setAdapter(adapter);  

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

    }   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {   

        case R.id.action_settings:
            Intent intent = new Intent(this, SettingsActivity.class);
            startActivity(intent);
            return true; 
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        Intent intent = new Intent(this, ChatActivity.class);
        intent.putExtra(Common.PROFILE_ID, String.valueOf(id));
        startActivity(intent);
    }   

    //----------------------------------------------------------------------------

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        CursorLoader loader = new CursorLoader(this, 
                DataProvider.CONTENT_URI_PROFILE, 
                new String[]{DataProvider.COL_ID, DataProvider.COL_NAME, DataProvider.COL_COUNT,DataProvider.PROFILE_COL_LASTMSGAT,DataProvider.PROFILE_COL_IMAGE}, 
                null, 
                null,//new String[]{DataProvider.PROFILE_COL_LASTMSGAT},  
                DataProvider.PROFILE_COL_LASTMSGAT + " DESC"); 
        return loader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        adapter.swapCursor(data);
    }

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

}

提前致谢!

原始的Android

暂时来说,主要要点是:

  1. onCreateLoader 从SQLite数据库获取数据。
  2. 此代码adapter = new SimpleCursorAdapter,填充适配器。
  3. 此代码listView.setAdapter(adapter);填充ListView。

使用SimpleCursorAdapter将数据从数据库获取到ListView时,有一个很好的Stackoverflow答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有CursorLoader和SimpleCursorAdapter的AutoCompleteTextView

来自分类Dev

带有selection和selectionArgs []的Android CursorLoader

来自分类Dev

带有selection和selectionArgs []的Android CursorLoader

来自分类Dev

Android中的SimpleCursorAdapter

来自分类Dev

Android中数据与UI之间松散耦合的最佳实践-Adapter,Filter,CursorLoader和ContentProvider

来自分类Dev

Android SimpleCursorAdapter保持滚动样式

来自分类Dev

如何在Android的simplecursoradapter中从[]值拆分

来自分类Dev

如何在Android的simplecursoradapter中从[]值拆分

来自分类Dev

CursorLoader和AsyncTaskLoader之间的区别

来自分类Dev

在Android中使用cursorLoader以人名的升序显示联系人

来自分类Dev

如何使用cursorloader读取Android中的SQLite数据库?

来自分类Dev

如何使用cursorloader读取Android中的SQLite数据库?

来自分类Dev

CursorAdapter如何从Android中的CursorLoader提供的Cursor加载数据?

来自分类Dev

在Android中使用cursorLoader以人名的升序显示联系人

来自分类Dev

rxJava和改造,而不是IntentService + CursorLoader?

来自分类Dev

私有静态类和CursorLoader

来自分类Dev

使用CursorLoader和FilterQueryProvider进行ListView过滤?

来自分类Dev

私有静态类和CursorLoader

来自分类Dev

Android ListFragment数据无法通过SimpleCursorAdapter / LoaderManager / notifyChange()更新

来自分类Dev

如何在SimpleCursorAdapter中自定义TextViews-Android

来自分类Dev

如何在SimpleCursorAdapter中自定义TextViews-Android

来自分类Dev

Android ListFragment数据无法通过SimpleCursorAdapter / LoaderManager / notifyChange()更新

来自分类Dev

ListView不显示。使用SherlockFragment和SimpleCursorAdapter

来自分类Dev

LoaderManager和CursorLoader在ViewPager的片段中不起作用

来自分类Dev

具有CursorAdapter和CursorLoader的ListView.addHeader

来自分类Dev

我如何使用Dagger2和CursorLoader

来自分类Dev

android:minSdkVersion和android:icon

来自分类Dev

Android:如何更改列表视图中列表项的背景颜色,由SimpleCursorAdapter管理

来自分类Dev

如何刷新数据库,然后将新数据放入android中的simplecursoradapter中?

Related 相关文章

  1. 1

    具有CursorLoader和SimpleCursorAdapter的AutoCompleteTextView

  2. 2

    带有selection和selectionArgs []的Android CursorLoader

  3. 3

    带有selection和selectionArgs []的Android CursorLoader

  4. 4

    Android中的SimpleCursorAdapter

  5. 5

    Android中数据与UI之间松散耦合的最佳实践-Adapter,Filter,CursorLoader和ContentProvider

  6. 6

    Android SimpleCursorAdapter保持滚动样式

  7. 7

    如何在Android的simplecursoradapter中从[]值拆分

  8. 8

    如何在Android的simplecursoradapter中从[]值拆分

  9. 9

    CursorLoader和AsyncTaskLoader之间的区别

  10. 10

    在Android中使用cursorLoader以人名的升序显示联系人

  11. 11

    如何使用cursorloader读取Android中的SQLite数据库?

  12. 12

    如何使用cursorloader读取Android中的SQLite数据库?

  13. 13

    CursorAdapter如何从Android中的CursorLoader提供的Cursor加载数据?

  14. 14

    在Android中使用cursorLoader以人名的升序显示联系人

  15. 15

    rxJava和改造,而不是IntentService + CursorLoader?

  16. 16

    私有静态类和CursorLoader

  17. 17

    使用CursorLoader和FilterQueryProvider进行ListView过滤?

  18. 18

    私有静态类和CursorLoader

  19. 19

    Android ListFragment数据无法通过SimpleCursorAdapter / LoaderManager / notifyChange()更新

  20. 20

    如何在SimpleCursorAdapter中自定义TextViews-Android

  21. 21

    如何在SimpleCursorAdapter中自定义TextViews-Android

  22. 22

    Android ListFragment数据无法通过SimpleCursorAdapter / LoaderManager / notifyChange()更新

  23. 23

    ListView不显示。使用SherlockFragment和SimpleCursorAdapter

  24. 24

    LoaderManager和CursorLoader在ViewPager的片段中不起作用

  25. 25

    具有CursorAdapter和CursorLoader的ListView.addHeader

  26. 26

    我如何使用Dagger2和CursorLoader

  27. 27

    android:minSdkVersion和android:icon

  28. 28

    Android:如何更改列表视图中列表项的背景颜色,由SimpleCursorAdapter管理

  29. 29

    如何刷新数据库,然后将新数据放入android中的simplecursoradapter中?

热门标签

归档