从SQlite数据库中简单显示数据

时间:2011-04-11 18:38:41

标签: android sqlite listview

我试图找到一个在布局中显示来自SQLite数据库的数据的简单示例。 我试着查看“Notebook”示例,但它只有一个输出列。 是否有一个带有多个输出列的示例,如果可能,还有一些列中的整数数据?

1 个答案:

答案 0 :(得分:2)

theblitz,

您可能需要考虑创建自己的客户Adapter。对于我的项目,我创建了一个自定义CursorAdapter。结果就是这样:

ListView with Custom CursorAdapter

以下是我自定义CursorAdapter的代码,如果您想将其用作示例:

public class ItemAdapter extends CursorAdapter {
    private LayoutInflater mLayoutInflater;
    private Context mContext;
    public ItemAdapter(Context context, Cursor c) {
        super(context, c);
        mContext = context;
        mLayoutInflater = LayoutInflater.from(context); 
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View v = mLayoutInflater.inflate(R.layout.items_row, parent, false);
        return v;
    }

    /**
     * @author will
     * 
     * @param   v
     *          The view in which the elements we set up here will be displayed.
     * 
     * @param   context
     *          The running context where this ListView adapter will be active.
     * 
     * @param   c
     *          The Cursor containing the query results we will display.
     */

    @Override
    public void bindView(View v, Context context, Cursor c) {
        String title = c.getString(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_TITLE));
        String date = c.getString(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_DATE));
        String imagePath = c.getString(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_IMG));
        String reminder = c.getString(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_REMINDER));
        int deletion = c.getInt(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_DELETION));
        int priority = c.getInt(c.getColumnIndexOrThrow(ItemDbAdapter.KEY_PRIORITY));

        /**
         * Next set the title of the entry.
         */

        TextView title_text = (TextView) v.findViewById(R.id.item_text);
        if (title_text != null) {
            title_text.setText(title);
        }

        setPriorityColor(title_text, priority);

        /**
         * Set Date
         */

        TextView date_text = (TextView) v.findViewById(R.id.item_date);
        if (date_text != null) {
            date_text.setText(date);
        }       

        /**
         * Decide if we should display the paper clip icon denoting image attachment
         */

        ImageView item_image = (ImageView) v.findViewById(R.id.item_attachment);
        item_image.setVisibility(ImageView.INVISIBLE);
        if (imagePath != null && imagePath.length() != 0 && item_image != null) {
            item_image.setVisibility(ImageView.VISIBLE);
        }

        /**
         * Decide if we should display the deletion indicator
         */
        ImageView del_image = (ImageView) v.findViewById(R.id.item_deletion);
        del_image.setVisibility(ImageView.INVISIBLE);
        if (deletion == 1) {
            del_image.setVisibility(ImageView.VISIBLE);
        }

        /**
         * Decide if we should display the reminder indicator
         */
        ImageView rem_image = (ImageView) v.findViewById(R.id.item_reminder);
        rem_image.setVisibility(ImageView.INVISIBLE);
        if(reminder != null && reminder.length() != 0 && rem_image != null) {
            rem_image.setVisibility(ImageView.VISIBLE);
        }
    }

    /**
     * Set the priority colors based on the SharedPreferences
     * 
     * @author will
     * 
     * @param   title 
     *          The particular TextView item we are handling
     * @param   priority 
     *          The current TextView item's associated priority level
     */

    private void setPriorityColor(TextView title, int priority) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        Resources res = mContext.getResources();

        switch(priority) {
        case ItemDbAdapter.PRIORITY_HIGH:
            title.setTextColor(prefs.getInt("highColor", res.getColor(R.color.high_priority)));
            break;
        case ItemDbAdapter.PRIORITY_NORMAL:
            title.setTextColor(prefs.getInt("normColor", res.getColor(R.color.norm_priority)));
            break;
        case ItemDbAdapter.PRIORITY_LOW:
            title.setTextColor(prefs.getInt("lowColor", res.getColor(R.color.low_priority)));
            break;
        }
    }
}

以及各个项目的xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/list_bg">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView android:id="@+id/item_text"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:lines="1"
            android:scrollHorizontally="true"
            android:ellipsize="end"
            android:paddingLeft="2sp"
            android:paddingTop="2sp"
            android:textSize="18sp"
            android:textStyle="bold"
            android:shadowColor="#90909090"
            android:shadowDx="1.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"/>

        <TextView android:id="@+id/item_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:textColor="#FF808080"
            android:paddingLeft="2sp"
            android:paddingTop="2sp"/>
    </LinearLayout>

    <ImageView android:id="@+id/item_deletion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/deletion"
        android:visibility="invisible"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:paddingRight="5sp"/>

    <ImageView android:id="@+id/item_attachment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/attachment"
        android:visibility="invisible"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@id/item_deletion"/>

    <ImageView android:id="@+id/item_reminder"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/alarm"
        android:visibility="invisible"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@id/item_attachment"/>

</RelativeLayout>

以下是主Activity的代码: 我调用此函数来使用我的自定义适配器显示光标:

private void fillData(String sortOrder) {
    Cursor itemsCursor = mDbHelper.fetchAllItems(sortOrder);
    startManagingCursor(itemsCursor);

    ItemAdapter itemAdapter = new ItemAdapter(this, itemsCursor);
    setListAdapter(itemAdapter);
    itemAdapter = null;
}

主要活动的XML:顶部相对布局适用于操作栏

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dip"
        android:background="@drawable/action_bar">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:textColor="#FFFFFF"
            android:textSize="20sp"
            android:textStyle="bold"
            android:shadowColor="#B0B0B0B0"
            android:shadowDx="2.0"
            android:shadowDy="2.0"
            android:shadowRadius="2.0"
            android:layout_centerVertical="true"
            android:paddingLeft="10dip"/>

        <ImageView
            android:drawable="@drawable/action_bar_add"
            android:id="@+id/action_bar_add"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:paddingRight="5dip"
            android:paddingLeft="5dip"
            android:src="@drawable/action_bar_add_anim"/>

        <View
            android:layout_height="fill_parent"
            android:layout_width="2px"
            android:layout_toLeftOf="@id/action_bar_add"
            android:background="#90909090"/>

</RelativeLayout>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <TextView android:id="@+id/android:empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/no_items"
        android:textSize="20sp"
        android:textStyle="bold"
        android:shadowColor="#90909090"
        android:shadowDx="1.0"
        android:shadowDy="1.0"
        android:shadowRadius="1.0"/>

</LinearLayout>
</LinearLayout>