使用customloader和自定义适配器显示sqlite数据

时间:2015-03-24 12:28:29

标签: sqlite listview android-activity custom-adapter

我想使用CustomAdapter在listview中显示sqlite数据 以下链接有助于仅显示列表中的单个项目 请帮我在一行中显示多个项目。

http://www.phloxblog.in/?p=1890

1 个答案:

答案 0 :(得分:0)

首先,创建扩展CursorAdapter并为其命名的新类。这个新的CursorAdapter类必须实现继承的抽象方法,如下所示:



public class MyCursorAdapter extends CursorAdapter {

    // Default constructor
    public MyCursorAdapter(Context context, Cursor cursor, int flags) {
        ...
    }

    public void bindView(View view, Context context, Cursor cursor) {
        ...
    }

    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        ...
        return null;
    }
}




接下来定义MyCursorAdapter的方法

在BaseAdapter中,视图是在getView方法中创建的;但是,在CursorAdapter中,视图是在newView()方法中创建的,元素是在bindView()中填充的。在newView()方法中,您只需将视图扩展为自定义xml并将其返回。在bindView()方法中,您可以设置视图的元素。这是代码:



public void bindView(View view, Context context, Cursor cursor) {
       TextView textViewTitle = (TextView) view.findViewById(R.id.articleTitle);
       String title = cursor.getString( cursor.getColumnIndex( MyTable.COLUMN_TITLE ) )
       textViewTitle.setText(title);
       ...
    }

    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        // R.layout.list_row is your xml layout for each row
        return cursorInflater.inflate(R.layout.list_row, parent, false);
    }
}




然后在Activity中,由于从数据库加载数据是繁重的工作,我们将在Thread中加载数据。如果你没有在它自己的线程中显式启动CursorAdapter,那么它将在主(UI)线程上运行,这可能会引起用户明显的抖动或响应缓慢的界面。在这里,我们将使用android Handler



public class ActivitySample extends Activity {
    MyCursorAdapter customAdapter;
    private Cursor mCursor;
    private ListView listView;

    // Default constructor
    public onCreate(Bundle savedInstanceState) {
        ...
        listView = (ListView) findViewById(R.id.activity_sample_layout);

        // Your database schema
        String[] mProjection = { 
                MyTable.COLUMN_ID, 
                MyTable.COLUMN_TITLE,
        };

        // Here we query database
        mCursor =  getContentResolver().query(
                MyAdContentProvider.CONTENT_URI,
                mProjection, 
                null,   
                null,                                       
                null);


        listView.setOnItemClickListener(new OnItemClickListener() {
                ...
        }):
    }

    new Handler().post(new Runnable() {

        @Override
        public void run() {
            customAdapter = new MyCursorAdapter(
                ActivitySample.this, 
                mCursor,
                0);

            listView.setAdapter(customAdapter);
        }

    });

}




如果这有助于你,请接受。