4

我想从数据库中填充 expandableListView 中的数据。实际上,我需要做的就是从一个我的单个表中检索所有数据,因为第一列将是 groupName,其余四列将是子列,但在这里我被卡住了......这是我的一段代码尝试。

公共类 ViewDetail 扩展 Activity{

private ExpandableListView mExpandableListView;
private List<GroupEntity> mGroupCollection;

public void onCreate(Bundle savedInstanceState ){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    prepareResource();
    initPage();
}

private void prepareResource() {

    mGroupCollection = new ArrayList<GroupEntity>();
    DBClass db = new DBClass(ViewDetail.this);
    SQLiteDatabase dc = db.getReadableDatabase();
    Cursor cur = dc.query(true, "db_table", new String[]{"title","_url","username","password","comment"}, null, null, null, null, null, null);
    ContentValues cv = null;
    String _title = "";
    String _url = "";
    String _usrname = "";
    String _pasword = "";
    String _comment = "";

    if(cur.getCount() <= 0){
        Toast.makeText(ViewDetail.this, "empty...Please add.", Toast.LENGTH_LONG).show();
    }else{

        for(int i=0;i<cur.getCount();i++){              

            _title = cur.getString(0);
            _url = cur.getString(1);
            _usrname = cur.getString(2);
            _pasword = cur.getString(3);
            _comment = cur.getString(4);

            GroupEntity ge = new GroupEntity();
            ge.Name = _title;
                GroupItemEntity gi = ge.new GroupItemEntity();
                gi.Name =  _url;//"Child" + j;
                gi.Name =  _usrname;
                gi.Name =  _pasword;
                gi.Name =  _comment;
            mGroupCollection.add(ge);
            cur.moveToNext();   

        }

    }

    cur.close();
    db.close();
    dc.close(); 
    }

}


private void initPage() {

    mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
    ExpandableListAdapter adapter = new ExpandableListAdapter(this,mExpandableListView, mGroupCollection);
    mExpandableListView.setAdapter(adapter);

}

}

公共类 ExpandableListAdapter 扩展 BaseExpandableListAdapter{

private Context mContext;
private ExpandableListView mExpandableListView;
private List<GroupEntity> mGroupCollection;
private int[] groupStatus;

public ExpandableListAdapter(Context pContext,ExpandableListView pExpandableListView,List<GroupEntity> pGroupCollection) {
    mContext = pContext;
    mGroupCollection = pGroupCollection;
    mExpandableListView = pExpandableListView;
    groupStatus = new int[mGroupCollection.size()];

    setListEvent();
}

private void setListEvent() {

    mExpandableListView.setOnGroupExpandListener(new OnGroupExpandListener() {

                @Override
                public void onGroupExpand(int arg0) {
                    groupStatus[arg0] = 1;
                }
            });

    mExpandableListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

                @Override
                public void onGroupCollapse(int arg0) {
                    groupStatus[arg0] = 0;
                }
            });
}

@Override
public String getChild(int arg0, int arg1) {
    return mGroupCollection.get(arg0).GroupItemCollection.get(arg1).Name;
}

@Override
public long getChildId(int arg0, int arg1) {
    return 0;
}

@Override
public View getChildView(int arg0, int arg1, boolean arg2, View arg3,ViewGroup arg4) {

    ChildHolder childHolder;
    if (arg3 == null) {

        arg3 = LayoutInflater.from(mContext).inflate(R.layout.list_group_item, null);
        childHolder = new ChildHolder();
        childHolder.title = (TextView) arg3.findViewById(R.id.item_title);
        arg3.setTag(childHolder);
    }else {
        childHolder = (ChildHolder) arg3.getTag();
    }

    childHolder.title.setText(mGroupCollection.get(arg0).GroupItemCollection.get(arg1).Name);
    return arg3;
}

@Override
public int getChildrenCount(int arg0) {
    return mGroupCollection.get(arg0).GroupItemCollection.size();
}

@Override
public Object getGroup(int arg0) {
    return mGroupCollection.get(arg0);
}

@Override
public int getGroupCount() {
    return mGroupCollection.size();
}

@Override
public long getGroupId(int arg0) {
    return arg0;
}

@Override
public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) {
    GroupHolder groupHolder;
    if (arg2 == null) {

        arg2 = LayoutInflater.from(mContext).inflate(R.layout.list_group,null);
        groupHolder = new GroupHolder();
        groupHolder.img = (ImageView) arg2.findViewById(R.id.tag_img);
        groupHolder.title = (TextView) arg2.findViewById(R.id.group_title);
        arg2.setTag(groupHolder);

    } else {
        groupHolder = (GroupHolder) arg2.getTag();
    }
    if (groupStatus[arg0] == 0) {
        groupHolder.img.setImageResource(R.drawable.group_down);
    } else {
        groupHolder.img.setImageResource(R.drawable.group_up);
    }
        groupHolder.title.setText(mGroupCollection.get(arg0).Name);

    return arg2;
}

class GroupHolder {
    ImageView img;
    TextView title;
}

class ChildHolder {
    TextView title;
}

@Override
public boolean hasStableIds() {
    return true;
}

@Override
public boolean isChildSelectable(int arg0, int arg1) {
    return true;
}

}

公共类 GroupEntity {

public String Name;
public List<GroupItemEntity> GroupItemCollection;

public GroupEntity()
{
    GroupItemCollection = new ArrayList<GroupItemEntity>();
}

public class GroupItemEntity
{
    public String Name;
}

}

4

1 回答 1

2

而不是存储数据的列表,将其直接从光标中拉出

  Cursor cursor = pContext.getContentResolver().query(DEFAULT_URI, null, null, null, null);

然后是一些例子......

@Override
public int getCount() {
    return cursor.getCount();
}

@Override
public Object getGroup(int position) {
    cursor.moveToPosition(position);
    String column1 = cursor.getString(COLUMN_1);
    String column2 = cursor.getString(COLUMN_2);
    GroupObject group = new Group(column1, column2);
    return group;
}
于 2012-09-06T06:05:00.733 回答