2012-09-05 88 views
4

我想從數據庫中填充expandableListView中的數據。實際上,我需要做的是從單個表中檢索所有數據,因爲第一列將是groupName,其餘四列將是子級,但是在這裏我卡住了...... 這是一段代碼我正在嘗試。在Android中從數據庫填充expandableListView的數據

公共類ViewDetail延伸活動{

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; 
} 

}

+0

我試圖做一些與此類似的事情,你可能會發布你使用過的佈局文件嗎?這幾乎是一個教程! – Diesel

回答

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; 
}