【问题标题】:Simple display of data from SQlite database简单显示来自 SQlite 数据库的数据
【发布时间】:2011-08-03 07:25:04
【问题描述】:

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

【问题讨论】:

    标签: android sqlite listview


    【解决方案1】:

    闪电战,

    您可能需要考虑创建自己的客户Adapter。对于我的项目,我创建了一个自定义 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>
    

    这是来自 Main Activity 的代码: 我调用这个函数来使用我的自定义适配器显示光标:

    private void fillData(String sortOrder) {
        Cursor itemsCursor = mDbHelper.fetchAllItems(sortOrder);
        startManagingCursor(itemsCursor);
    
        ItemAdapter itemAdapter = new ItemAdapter(this, itemsCursor);
        setListAdapter(itemAdapter);
        itemAdapter = null;
    }
    

    主 Activity 的 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>
    

    【讨论】:

    • 谢谢。我去看看试试看。
    • 你能举个例子说明你是如何将它整合到整个 UI 屏幕中的吗?
    • 添加了显示如何从主活动和主活动的 xml 中使用适配器的代码
    • 非常感谢。还有一个问题:我没有 setListAdapter,如何将数据放入对话框中。
    猜你喜欢
    • 2013-11-17
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2015-09-20
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多