2017-09-26 2 views
0

Pour commencer, cet ensemble de codes ne fonctionnent pas :)Comment Peupler RadioGroup et ListView de base de données Android Studio est

Activité XML //list_data.xml

<ListView 
     android:id="@+id/ListView" 
     android:layout_width="368dp" 
     android:layout_height="200dp" 
     tools:layout_editor_absoluteX="8dp" 
     tools:layout_editor_absoluteY="8dp" /> 

    <RadioGroup 
     android:id="@+id/RadioGroup" 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" > 

    </RadioGroup> 

Database Helper dbHelper.java

package com.example.excgen.taxi; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

/** 
* Created by Excgen on 9/25/2017. 
*/ 

public class dbHelper extends SQLiteOpenHelper { 

    private static final String TAG = "databaseHelper"; 

    private static final String TABLE_NAME = "units"; 
    private static final String COL1 = "id"; 
    private static final String COL2 = "plate"; 

    public dbHelper(Context context){ 
     super(context, TABLE_NAME, null, 1); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String createTable = "CREATE TABLE "+TABLE_NAME+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, "+COL2+" TEXT)"; 
     db.execSQL(createTable); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP IF TABLE EXISTS "+TABLE_NAME); 
     onCreate(db); 
    } 
    public boolean addData(String item){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL2, item); 

     Log.d(TAG,"addData: Adding "+item+" to "+TABLE_NAME); 

     long result = db.insert(TABLE_NAME,null,contentValues); 

     if(result == -1){ 
      return false; 
     }else{ 
      return true; 
     } 
    } 

    public Cursor getData(){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     String query = "SELECT * FROM "+ TABLE_NAME; 
     Cursor data = db.rawQuery(query,null); 
     return data; 
    } 
} 

classe Activité listData.java

package com.example.excgen.taxi; 

import android.database.Cursor; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 

import java.util.ArrayList; 

public class listData extends AppCompatActivity { 

    public static String TAG = "listDataActivity"; 
    dbHelper mdbHelper; 
    private ListView mlistView; 
    private RadioGroup mRadioGroup; 
    private RadioButton mRadioButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list_data); 

     mlistView = (ListView) findViewById(R.id.ListView); 
     mdbHelper = new dbHelper(this); 
     populateListView(); 
     populateRadioGroup(); 
    } 

    private void populateListView(){ 
     Log.d(TAG,"Populate List View; Displaying Data in the List View"); 
     Cursor data = mdbHelper.getData(); 
     ArrayList<String> dataList = new ArrayList<>(); 
     while(data.moveToNext()){ 
      dataList.add(data.getString(1)); 
     } 
     ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,dataList); 
     mlistView.setAdapter(adapter); 
    } 

    private void populateRadioGroup(){ 
     Cursor data = mdbHelper.getData(); 
     ArrayList<String> dataList = new ArrayList<>(); 
     while(data.moveToNext()){ 
      dataList.add(data.getString(1)); 
     } 

     for (int i = 0; i < dataList.size()-1; i++) { 
      mRadioGroup = (RadioGroup)  findViewById(R.id.RadioGroup); 
      mRadioButton = new RadioButton(this); 
      mRadioButton.setId(i); 
      mRadioButton.setText(dataList.get(i)); 
      mRadioGroup.addView(mRadioButton); 
     } 
    } 
} 

Résumé: valeurs de base de données à arraylist puis listView ou RadioGroup Notez que cet ensemble n'a pas pu obtenir le "id" réel de l'ID de colonne de la table de données. Pour obtenir l'ID réel, utilisez data.getString (0) car data.getString (1) obtient des valeurs de la deuxième colonne

Maintenant la vraie question est, est-ce que cela a une façon plus simple? : D

Répondre

0

Au lieu d'exécuter deux fois la boucle et de créer deux méthodes différentes, vous pouvez les fusionner en une seule et la rendre simple et efficace.

Conserver un compteur en tant que variable globale et continuer à le mettre à jour jusqu'à ce que tous les éléments db soient récupérés et ajoutés dans l'arborescence.

private int count=0; 

private void populateListView(){ 

    Log.d(TAG,"Populate List View; Displaying Data in the List View"); 
    Cursor data = mdbHelper.getData(); 
    ArrayList<String> dataList = new ArrayList<>(); 
    while(data.moveToNext()){ 

     dataList.add(data.getString(1)); 
     mRadioGroup = (RadioGroup)  findViewById(R.id.RadioGroup); 
     mRadioButton = new RadioButton(this); 
     mRadioButton.setId(i); 
     mRadioButton.setText(dataList.get(i)); 
     mRadioGroup.addView(mRadioButton); 
     count++; 
    } 
    ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,dataList); 
    mlistView.setAdapter(adapter); 
}