2017-09-26 106 views
0

对于初学者来说,这组代码的工作:)如何从数据库Android Studio中填充RadioGroup中和ListView

活动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> 

数据库帮助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; 
    } 
} 

活动类别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); 
     } 
    } 
} 

摘要:将数据库值设置为arraylist,然后设置为listView或RadioGroup 请注意,此设置无法从数据表的列ID中获取实际的“id”。 要得到实际的ID使用data.getString(0),因为data.getString(1)从第二列获取值

现在真正的问题是,这是否有一个更简单的方法? :D

回答

0

不是两次运行循环,而是创建两种不同的方法,您可以将它们合并为一个,使其变得简单并且高效。

维护一个计数器作为全局变量并不断更新它,直到所有的db项被提取并添加到数组列表中。

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); 
} 
相关问题