Expandablelistview扩展simplecursoradapter以从sqlite填充

sil*_*oxA 6 sqlite android android-fragments android-sqlite

如何在片段内实现android SQLite,而不是将其扩展到片段以外的任何其他片段,同时将这些条目放在可扩展listview的子元素中.

这就是我所实现的:http://wptrafficanalyzer.in/blog/implementing-horizo​​ntal-view-swiping-using-viewpager-and-fragmentpageradapter-in-android/

我正在我的主要活动中实现视图寻呼机,因此我必须在其中做我必须做的事情.我不知道如何使用SQLite与片段和自定义Expandablelist适配器请帮助我.

在这里,我基本上将用户名和年龄作为用户条目,我希望在expandablelistview的子项中显示.

因此,日期表的问题无法打开参与活动,即活动2

更新:: SQLiteAdapter:

public class SQLiteDBAdapter {

private static final String TAG = "DBAdapter"; //used for logging database version changes
// DataBase info:
public static final String DATABASE_NAME = "entry";
public static final String DATABASE_TABLE2 = "entryTable";
public static final String DATABASE_TABLE1= "dateTable";
public static final int DATABASE_VERSION = 7; // The version number must be incremented each time a change to DB structure occurs.

//Field Names(date table):
public static final String KEY_ROWID = "_id";
public static final String KEY_UDATE ="date"; //common field

// Field Names(entry table):
public static final String KEY_EROWID = "_id";
public static final String KEY_CID = "Cid"; //spinner category
public static final String KEY_TITLE = "title";
public static final String KEY_COST = "cost";
public static final String KEY_NOTE = "note";
public static final String KEY_DATE = "date";
public static final String KEY_DAY ="day";
private static final String KEY_MONTH = "month";
private static final String KEY_YEAR = "year";
public static final String KEY_TIME = "time";

public static final String[] ALL_KEYS_DATE = new String[] { KEY_UDATE,KEY_ROWID};
public static final String[] ALL_KEYS_ENTRY = new String[] {KEY_EROWID,KEY_CID, KEY_TITLE,KEY_COST,KEY_NOTE,KEY_DATE,KEY_DAY,KEY_MONTH,KEY_YEAR,KEY_TIME};



//SQL statement to create database
private static final String DATABASE_CREATE_SQL_DATE=
        "CREATE TABLE" + DATABASE_TABLE1
        +"("+ KEY_ROWID +"INTEGER PRIMARY KEY AUTOINCREMENT, "
        + KEY_UDATE +"INTEGER UNIQUE NOT NULL"
        +");";
private static final String DATABASE_CREATE_SQL_ENTRY =
        "CREATE TABLE " + DATABASE_TABLE2
        + " (" + KEY_DATE + " TEXT NOT NULL,"
        + KEY_EROWID +"INTEGER PRIMARY KEY AUTOINCREMENT, "
        + KEY_CID + " INTEGER,"
        + KEY_TITLE + " TEXT NOT NULL, "
        + KEY_COST + " INTEGER,"
        + KEY_NOTE+ " TEXT NOT NULL,"
        + KEY_DAY + "INTEGER NOT NULL, "
        + KEY_MONTH + " TEXT NOT NULL,"
        + KEY_YEAR + " INTEGER NOT NULL,"
        + KEY_TIME + " TEXT NOT NULL"
                +"FOREIGN KEY ("+KEY_DATE+")REFERENCES "+DATABASE_TABLE1+"("+KEY_UDATE+")" //FOREIGN KEY
        + ");";


private final Context context;
private DatabaseHelper myDBHelper;
private SQLiteDatabase db;


public SQLiteDBAdapter(Context ctx) {
    this.context = ctx;
    myDBHelper = new DatabaseHelper(context);
}

// Open the database connection.
public SQLiteDBAdapter open() {
    db = myDBHelper.getWritableDatabase();
    return this;
}

// Close the database connection.
public void close() {
    myDBHelper.close();
}

// Add a new set of values to be inserted into the database.
//operations for the date table
public long insertRowDate(String datestring){
    ContentValues values= new ContentValues();
    values.put(KEY_UDATE,datestring);
    CharSequence text = " Date has been inserted";
    int duration = Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    return db.insert(DATABASE_TABLE1,null,values);
}
//operations for the entry table
public long insertRowEntry(String cid, String title, String cost, String note,String date, String day, String monthDb, int year, String time) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_CID, cid);
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_COST,cost);
    initialValues.put(KEY_NOTE,note);
    initialValues.put(KEY_DATE, date);
    initialValues.put(KEY_DAY, day);
    initialValues.put(KEY_MONTH, monthDb);
    initialValues.put(KEY_YEAR, year);
    initialValues.put(KEY_TIME,time);
    CharSequence text = " Row has been inserted";
    int duration = Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    // Insert the data into the database.
    return db.insert(DATABASE_TABLE2, null, initialValues);
}

// Delete a row from the database, by rowId (primary key)
public boolean deleteRowDate(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    return db.delete(DATABASE_TABLE1, where, null) != 0;
}
public boolean deleteRowEntry(long rowId) {
    String where = KEY_EROWID + "=" + rowId;
    return db.delete(DATABASE_TABLE2, where, null) != 0;
}
public void deleteAllDate() {
    Cursor c = getAllRowsDate();
    long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
    if (c.moveToFirst()) {
        do {
            deleteRowDate(c.getLong((int) rowId));
        } while (c.moveToNext());
    }
    c.close();
}
public void deleteAllEntry() {
    Cursor c = getAllRowsEntry();
    long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
    if (c.moveToFirst()) {
        do {
            deleteRowEntry(c.getLong((int) rowId));
        } while (c.moveToNext());
    }
    c.close();
}

// Return all data in the database.
public Cursor getAllRowsDate() {
    String where = null;
    Cursor c =  db.query(true, DATABASE_TABLE1, ALL_KEYS_DATE, where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}
public Cursor getAllRowsEntry() {
    String where = null;
    Cursor c =  db.query(true, DATABASE_TABLE2, ALL_KEYS_ENTRY, where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

// Get a specific row (by rowId)
public Cursor getRowDate(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    Cursor c =  db.query(true, DATABASE_TABLE1, ALL_KEYS_DATE,
                    where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}
public Cursor getRowEntry(long rowId) {
    String where = KEY_EROWID + "=" + rowId;
    Cursor c =  db.query(true, DATABASE_TABLE2, ALL_KEYS_ENTRY,
            where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

// Change an existing row to be equal to new data.
public boolean updateRowDate(long rowId,String date) {
    String where = KEY_ROWID + "=" + rowId;
    ContentValues newValues = new ContentValues();
    newValues.put(KEY_UDATE, date);
    // Insert it into the database.
    return db.update(DATABASE_TABLE2, newValues, where, null) != 0;
}
public boolean updateRowEntry(long rowId,String cid, String title, String cost, String note,String date,String day, String month, int year, String time) {
    String where = KEY_EROWID + "=" + rowId;
    ContentValues newValues = new ContentValues();
    newValues.put(KEY_CID, cid);
    newValues.put(KEY_TITLE, title);
    newValues.put(KEY_COST, cost);
    newValues.put(KEY_NOTE, note);
    newValues.put(KEY_DATE, date);
    newValues.put(KEY_DAY, day);
    newValues.put(KEY_MONTH, month);
    newValues.put(KEY_YEAR, year);
    newValues.put(KEY_TIME, time);
    // Insert it into the database.
    return db.update(DATABASE_TABLE1, newValues, where, null) != 0;
}
//fetching groups from the database db
public Cursor fetchgroup(){
    String query="SELECT * FROM datetable";
            return db.rawQuery(query,null);
}
//fetching children from the database db
public Cursor fetchChildren(String date) {
    String query = "SELECT * FROM entrytable WHERE date = '" + date + "'";
    return db.rawQuery(query, null);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase _db) {
        _db.execSQL(DATABASE_CREATE_SQL_ENTRY);
        _db.execSQL(DATABASE_CREATE_SQL_DATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading application's database from version " + oldVersion
                + " to " + newVersion + ", which will destroy all old data!");

        // Destroy old database:
        _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_CREATE_SQL_DATE);
        _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_CREATE_SQL_ENTRY);

        // Recreate new database:
        onCreate(_db);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

UPDATED :: 从Activity2我将数据存储为

entryDb.insertRowDate(date);
                entryDb.insertRowEntry(a, title, cost, note,date, Daym,monthDb, year, time);
Run Code Online (Sandbox Code Playgroud)

这是我的expandableListview

lv = (ExpandableListView) v.findViewById(R.id.expandable_list);
        ExpandableListAdapter expandableListAdapter = new ExpandableListAdapter(weekdays, children);
        lv.setAdapter(expandableListAdapter);


 public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private  LayoutInflater inf;
    private String[] groups;
    private String[][] children;

    public ExpandableListAdapter(String[] groups, String[][] children) {
        this.groups = groups;
        this.children = children;
        inf = LayoutInflater.from(getActivity());
    }

    @Override
    public int getGroupCount() {
        return groups.length;
    }

    @Override
    public int getChildrenCount(int groupPosition) {

        return children[groupPosition].length;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups[groupPosition];
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return children[groupPosition][childPosition];
    }

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

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

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

    @Override
    public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView == null) {
            convertView = inf.inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();

            holder.text = (TextView) convertView.findViewById(R.id.lblListItem);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
holder.text.setText(""+ myDataFromActivity);
        return convertView;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        ViewHolder holder;
        TextView textView;
        if (convertView == null) {
            convertView = inf.inflate(R.layout.list_group, parent, false);

            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.lblListHeader);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }


      //  holder.text.setText(getGroup(groupPosition).toString());//testing
        //Sets the group position hence the Date
        textView=(TextView)convertView.findViewById(R.id.date);
        textView.setTextSize(30);
        if((groupPosition+1)<10)
        textView.setText("0"+(groupPosition+1));
        else
        textView.setText(""+(groupPosition+1));
        //TODO
        /*
        * Think of a subtext to make the layout much more interactive
        * */
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    private class ViewHolder {
        TextView text;
    }
}
Run Code Online (Sandbox Code Playgroud)