2015-04-05 3 views
6

Comment implémenter android SQLite dans des fragments et ne pas l'étendre à d'autres fragments que ceux placés dans l'enfant de la liste déroulante.Expandablelistview extends simplecursoradapter pour remplir à partir de sqlite

C'est ce que j'ai mis en œuvre: http://wptrafficanalyzer.in/blog/implementing-horizontal-view-swiping-using-viewpager-and-fragmentpageradapter-in-android/

Je suis mise en œuvre téléavertisseur vue dans mon MainActivity donc ce que jamais je dois-je faire à l'intérieur. Je ne sais pas comment utiliser SQLite avec le fragment et l'adaptateur Expandablelist personnalisé s'il vous plaît aidez-moi.

Ici, je prends essentiellement le nom de l'utilisateur et l'âge en tant qu'entrées d'utilisateur que je veux être affiché dans l'enfant de expandablelistview.

Problème avec la table de la date où ne peut pas ouvrir l'activité prise d'entrée-à-dire l'activité 2

Mise à jour :: 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); 
    } 
} 
} 

MISE À JOUR :: De la Activité 2 Je stocke les données en tant que

entryDb.insertRowDate(date); 
       entryDb.insertRowEntry(a, title, cost, note,date, Daym,monthDb, year, time); 

et voici mon 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; 
    } 
} 
+0

Vous pouvez également utiliser la limite et le décalage en sqlite pour les besoins de pagination. longueur de la page = 10, puis sélectionnez * à partir de l'offset de la table 0 limite 10, la page 2 sera compensée 10 limite 10. Pour le défilement et le chargement simultanés, utilisez un état d'esprit comme Datatables.net ici http://datatables.net/release-datatables/ extensions/Scroller/examples/server-side_processing.html – Pierre

+0

Désolé mais cela n'a pas aidé et le lien que vous avez envoyé est complètement différent de sa relation avec cette question en fait – silverFoxA

+0

Faire une classe personnalisée 'Personne' qui devrait stocker des valeurs comme le nom en tant que parent et un arraylist qui sauvera des valeurs d'enfant. Dans l'adaptateur, récupère la valeur parente et pour toute la boucle enfant à travers les valeurs enfant de l'objet. Vous passerez la liste des objets de la base de données. – Harry

Répondre

-1

Je ne peux pas ajouter un commentaire si je tente de comprendre votre problème. Comme je peux le voir sur votre SQLiteAdapter: vous n'avez pas de méthode pour reprendre tous les enregistrements dans votre base de données pour remplir votre Expandelistist.

Peut-être que vous avez besoin d'une méthode comme:

// Getting All records 
public List<Records> getAllRecords() { 
List<Records> recordList = new ArrayList<Records>(); 
// Select All Query 
String selectQuery = "SELECT * FROM " + DATABASE_TABLE; 

SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 

// looping through all rows and adding to list 
if (cursor.moveToFirst()) { 
//String title, String cost, String note,String date, String month, int year, String time 
    do { 
     Records records = new Record(); 
     records.setTitle(cursor.getString(0)); 
     records.setCost(cursor.getString(1)); 
     records.setNote(cursor.getString(2)); 
     records.setDate(cursor.getString(3)); 
     records.setMounth(cursor.getString(4)); 
     records.setYear(Integer.parseInt(cursor.getString(5))); 
     records.setTime(cursor.getString(6)); 
     // Adding records to list 
     recordsList.add(record); 
    } while (cursor.moveToNext()); 
} 

// return contact list 
return recordsList; 
} 

Vous avez besoin d'une Record.java de classe qui gèrent les setTitle, setCost .... et vous pouvez prendre tous les enregistrements avec pour comme celui-ci

Ce code doit être écrit dans l'activité qui récupère les données de sqlite.

MySQLiteHelper db = new MySQLiteHelper(this); 
List<Records> records = db.getAllRecords();  

    for (Records rc : records) { 
     //Do something with the records 
    } 

La source est ici: DatabaseSqlite with method

Est-ce le problème?

+0

je vais essayer sur le code que vous avez fourni et vous le ferons savoir – silverFoxA

+0

Si le problème est que (comment prendre tous les enregistrements de sqlite et l'utiliser). Ce code fonctionne, je l'utilise de manière similaire dans mon application. Suivez le lien que je poste et faites-moi savoir si vous avez un problème! – Mario

+0

le lien, le tutoriel n'est pas dynamique et je n'ai pas la bonne compréhension ou l'expérience avec le SQLite avant donc je dois l'essayer comme je veux que ce qui suit soit dynamique et je ne peux pas mettre arraylist à mon adaptateur expandelistist – silverFoxA