【问题标题】:Android. ExpandableListAdapter and Sqlite安卓。 ExpandableListAdapter 和 Sqlite
【发布时间】:2010-09-02 14:16:56
【问题描述】:

有没有使用可扩展列表适配器和 sql 查询结果的好例子?

文档提供了 3 个使用 expandablelistadapter 的示例,但没有一个涉及 sqlite

谢谢

凯文

【问题讨论】:

    标签: android sqlite expandablelistadapter


    【解决方案1】:

    给你。 “QuestionCategory”是我的简单组数据类。 “SimpleQuestion”用于项目数据。适配器接收上下文、我的数据库适配器和一个带有组的准备好的 ArrayList - 类别。适配器初始化其项 ArrayList(然后,在 getChild() 中,如果需要 - 当 groupPosition 更改时刷新它)。无论如何,它适合我的需要,但任何人都可以根据自己的需要进行调整。享受吧。

    private class QuestionCategory{
        public int id;
        public String name;
    
        QuestionCategory(int pId, String pName){
            this.id = pId;
            this.name = pName;
        }
    }
    
    private class SimpleQuestion extends QuestionCategory{
        public int categoryId;
    
        SimpleQuestion(int pCatId, int pId, String pName){
             super(pId, pName);
             categoryId = pCatId;
         }
    }
    
    
    private class QuestionListAdapter extends BaseExpandableListAdapter {
    
        private Context mContext;
        private DBAdapter mDB;
    
        private ArrayList<QuestionCategory> mCategoriesArrayList;
        private ArrayList<SimpleQuestion> mItemsArrayList;
    
        public QuestionListAdapter(Context pContext, DBAdapter pDb, ArrayList<QuestionCategory> pCategoriesArrayList) {
            mContext = pContext;
            mDB = pDb;
            mCategoriesArrayList = pCategoriesArrayList;
            mItemsArrayList = new ArrayList<SimpleQuestion>();
        }
    
        @Override
        public int getGroupCount() {
            return mCategoriesArrayList.size();
        }
    
        @Override
        public int getChildrenCount(int groupPosition) {
            int count = 0;
            if(mItemsArrayList.isEmpty() || ((SimpleQuestion)mItemsArrayList.get(0)).categoryId != getGroupId(groupPosition)){
                Cursor itemsCursor = mDB.getQuestionsCursor((int)getGroupId(groupPosition));
                count = itemsCursor.getCount();
                itemsCursor.close();
            }
            else
                count = mItemsArrayList.size();
            return count;
        }
    
        @Override
        public Object getGroup(int groupPosition) {
            return mCategoriesArrayList.get(groupPosition);
        }
    
        @Override
        public long getGroupId(int groupPosition) {
            return ((QuestionCategory)getGroup(groupPosition)).id;
        }
    
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            int categoryId = (int)getGroupId(groupPosition);
            //Check if we are not in our current group now, or the current cached items are wrong - MUST BE RECACHED
            if(mItemsArrayList.isEmpty() || ((SimpleQuestion)mItemsArrayList.get(0)).categoryId != categoryId){
                Cursor itemsCursor = mDB.getQuestionsCursor((int)getGroupId(groupPosition));
                itemsCursor.requery();
                mItemsArrayList.clear();         
                if (itemsCursor.moveToFirst())
                    do {
                        int id = itemsCursor.getInt(itemsCursor.getColumnIndex(DBAdapter.COL_ID));
                        String name = itemsCursor.getString(itemsCursor.getColumnIndex(DBAdapter.COL_TEXT));                        
                        SimpleQuestion newItem = new SimpleQuestion(categoryId, id, name);                
                        mItemsArrayList.add(newItem);
    
                    } while (itemsCursor.moveToNext());
                itemsCursor.close();
            }                
            return mItemsArrayList.get(childPosition);
        }        
    
        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return ((SimpleQuestion)(getChild(groupPosition, childPosition))).id;
        }
    
        @Override
        public boolean hasStableIds() {
            return true;
        }
    
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    
            LinearLayout view;
            final QuestionCategory group = (QuestionCategory)getGroup(groupPosition);            
            String name = group.name;
    
            if (convertView == null) {
                view = new LinearLayout(mContext);
                String inflater = Context.LAYOUT_INFLATER_SERVICE;
                LayoutInflater vi = (LayoutInflater) mContext.getSystemService(inflater);
                vi.inflate(R.layout.question_list_item, view, true);
            } else {
                view = (LinearLayout) convertView;
            }
    
            TextView textTV = (TextView) view.findViewById(R.id.questionListItemTVText);  
            textTV.setText(name);
    
            return view;
        }
    
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            LinearLayout view;
            final SimpleQuestion item = (SimpleQuestion)getChild(groupPosition, childPosition);            
            String name = item.name;
    
            if (convertView == null) {
                view = new LinearLayout(mContext);
                String inflater = Context.LAYOUT_INFLATER_SERVICE;
                LayoutInflater vi = (LayoutInflater) mContext.getSystemService(inflater);
                vi.inflate(R.layout.question_list_item, view, true);
            } else {
                view = (LinearLayout) convertView;
            }
    
            TextView textTV = (TextView) view.findViewById(R.id.questionListItemTVText);  
            textTV.setText(name);
    
            return view;        
        }
    
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
    
    }
    

    【讨论】:

    • 我也在寻找类似的答案,但由于我需要使用本地 sqlite 数据库使用可扩展列表视图的教程而被问题阻止。如果您能进一步解释您的答案,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多