在 Spinner 中从 SQLite 加载数据
Load data from SQLite in Spinner
我正在尝试将我的员工姓名从我的 SQL 加载到我的微调器,但我得到的是:
如您所见,我的应用程序目录正在加载,我不知道为什么。
我的activity:
public class AddAbsenceForm extends Activity implements OnItemSelectedListener {
Spinner spinner;
Button buttonAdd;
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_absence_form);
//spinner element
spinner = (Spinner) findViewById(R.id.names_spinner);
//spinner click listener
spinner.setOnItemSelectedListener(this);
//loading spinner data from database
loadSpinnerData();
}
private void loadSpinnerData() {
//database handler
LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext());
//spinner drop down elements
List<DataBean> list = db.getAllDat();
//creating adapter for spinner
ArrayAdapter<DataBean > dataAdapter = new ArrayAdapter<DataBean>(this, android.R.layout.simple_spinner_dropdown_item, list);
//drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
String list = parent.getItemAtPosition(position).toString();
//showing selected spinner item
Toast.makeText(parent.getContext(), "You selected: " + list, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
数据库方法:
public List <DataBean> getAllDat(){
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db = helper.getReadableDatabase();
String [] columns = {LysandrosHelper.UID, LysandrosHelper.NAME, LysandrosHelper.SURNAME, LysandrosHelper.DEPARTMENT, LysandrosHelper.WORKPLACE};
Cursor cursor = db.query(LysandrosHelper.TABLE_NAME, columns, null, null, null, null, null);
while (cursor.moveToNext()) {
int index = cursor.getColumnIndex(LysandrosHelper.UID);
int index2 = cursor.getColumnIndex(LysandrosHelper.NAME);
int index3 = cursor.getColumnIndex(LysandrosHelper.SURNAME);
int index4 = cursor.getColumnIndex(LysandrosHelper.DEPARTMENT);
int index5 = cursor.getColumnIndex(LysandrosHelper.WORKPLACE);
int cid = cursor.getInt(index);
String persoName = cursor.getString(index2);
String personSurname = cursor.getString(index3);
String personDepartment = cursor.getString(index4);
String personWorkplace = cursor.getString(index5);
DataBean bean = new DataBean(cid, persoName, personSurname, personDepartment, personWorkplace);
list.add(bean);
}
return list;
}
XML 中的微调器:
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/names_spinner"
android:text="@string/select_employee">
</Spinner>
请有人告诉我我缺少什么
编辑:
我的 DataBean class:
public class DataBean {
protected int id;
protected String name;
protected String surname;
protected String department;
protected String workplace;
public DataBean() {
}
public DataBean (int id, String name, String surname, String department, String workplace ) {
this.id = id;
this.name = name;
this.surname = surname;
this.department = department;
this.workplace = workplace;
}
public DataBean (String name, String surname, String department, String workplace) {
this.name = name;
this.surname = surname;
this.department = department;
this.workplace = workplace;
}
public int getID() {
return this.id;
}
public String getName() {
return this. name;
}
public String getSurname() {
return this.surname;
}
public String getDepartment() {
return this.department;
}
public String getWorkplace() {
return this.workplace;
}
}
编辑 2:我的布局更改为这个..
如果您只想显示名称,请用此替换您的 loadSpinnerData()
方法,否则请使用 Custome Adapter
private void loadSpinnerData() {
//database handler
LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext());
//spinner drop down elements
List<DataBean> list = db.getAllDat();
//creating adapter for spinner
String[] nameList=new String[list.size()];
for(int i=0;i<list.size();i++){
nameList[i]=list.get(i).getName(); //create array of name
}
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, nameList);
//drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
创建扩展 ArrayAdapter
.
的自定义适配器
public class MyAdapter extends ArrayAdapter<DataBean>{
Context context;
int layoutResourceId;
ArrayList<DataBean> data;
public MyAdapter(Context context, int layoutResourceId, ArrayList<DataBean> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.persoName = (TextView)row.findViewById(R.id.persoName);
row.setTag(holder);
}
else
{
holder = (ViewHolder)row.getTag();
}
holder.persoName.setText(list.get(position).getName());
return row;
}
static class ViewHolder
{
TextView persoName;
}
}
这是微调器列表项的 xml 文件。
spinner_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:id="@+id/persoName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_weight="70"
android:text="Name"
android:textColor="#000000"
android:textSize="22sp"
android:textStyle="bold" />
</LinearLayout>
这里只给出了一个数据串的例子
那就这样用吧
private void loadSpinnerData() {
//database handler
LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext());
//spinner drop down elements
ArrayList<DataBean> list = db.getAllDat();
//creating adapter for spinner
MyAdapter<DataBean > dataAdapter = new MyAdapter<DataBean>(this, R.layout.spinner_list_item, list);
//drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
您可以参考这个link来查看如何使用自定义适配器。
您也可以简单地覆盖 DataBean
class 的 toString
方法和 return 要在 Spinner
中显示的文本。
我正在尝试将我的员工姓名从我的 SQL 加载到我的微调器,但我得到的是:
如您所见,我的应用程序目录正在加载,我不知道为什么。
我的activity:
public class AddAbsenceForm extends Activity implements OnItemSelectedListener {
Spinner spinner;
Button buttonAdd;
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_absence_form);
//spinner element
spinner = (Spinner) findViewById(R.id.names_spinner);
//spinner click listener
spinner.setOnItemSelectedListener(this);
//loading spinner data from database
loadSpinnerData();
}
private void loadSpinnerData() {
//database handler
LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext());
//spinner drop down elements
List<DataBean> list = db.getAllDat();
//creating adapter for spinner
ArrayAdapter<DataBean > dataAdapter = new ArrayAdapter<DataBean>(this, android.R.layout.simple_spinner_dropdown_item, list);
//drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
String list = parent.getItemAtPosition(position).toString();
//showing selected spinner item
Toast.makeText(parent.getContext(), "You selected: " + list, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
数据库方法:
public List <DataBean> getAllDat(){
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db = helper.getReadableDatabase();
String [] columns = {LysandrosHelper.UID, LysandrosHelper.NAME, LysandrosHelper.SURNAME, LysandrosHelper.DEPARTMENT, LysandrosHelper.WORKPLACE};
Cursor cursor = db.query(LysandrosHelper.TABLE_NAME, columns, null, null, null, null, null);
while (cursor.moveToNext()) {
int index = cursor.getColumnIndex(LysandrosHelper.UID);
int index2 = cursor.getColumnIndex(LysandrosHelper.NAME);
int index3 = cursor.getColumnIndex(LysandrosHelper.SURNAME);
int index4 = cursor.getColumnIndex(LysandrosHelper.DEPARTMENT);
int index5 = cursor.getColumnIndex(LysandrosHelper.WORKPLACE);
int cid = cursor.getInt(index);
String persoName = cursor.getString(index2);
String personSurname = cursor.getString(index3);
String personDepartment = cursor.getString(index4);
String personWorkplace = cursor.getString(index5);
DataBean bean = new DataBean(cid, persoName, personSurname, personDepartment, personWorkplace);
list.add(bean);
}
return list;
}
XML 中的微调器:
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/names_spinner"
android:text="@string/select_employee">
</Spinner>
请有人告诉我我缺少什么
编辑:
我的 DataBean class:
public class DataBean {
protected int id;
protected String name;
protected String surname;
protected String department;
protected String workplace;
public DataBean() {
}
public DataBean (int id, String name, String surname, String department, String workplace ) {
this.id = id;
this.name = name;
this.surname = surname;
this.department = department;
this.workplace = workplace;
}
public DataBean (String name, String surname, String department, String workplace) {
this.name = name;
this.surname = surname;
this.department = department;
this.workplace = workplace;
}
public int getID() {
return this.id;
}
public String getName() {
return this. name;
}
public String getSurname() {
return this.surname;
}
public String getDepartment() {
return this.department;
}
public String getWorkplace() {
return this.workplace;
}
}
编辑 2:我的布局更改为这个..
如果您只想显示名称,请用此替换您的 loadSpinnerData()
方法,否则请使用 Custome Adapter
private void loadSpinnerData() {
//database handler
LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext());
//spinner drop down elements
List<DataBean> list = db.getAllDat();
//creating adapter for spinner
String[] nameList=new String[list.size()];
for(int i=0;i<list.size();i++){
nameList[i]=list.get(i).getName(); //create array of name
}
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, nameList);
//drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
创建扩展 ArrayAdapter
.
public class MyAdapter extends ArrayAdapter<DataBean>{
Context context;
int layoutResourceId;
ArrayList<DataBean> data;
public MyAdapter(Context context, int layoutResourceId, ArrayList<DataBean> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.persoName = (TextView)row.findViewById(R.id.persoName);
row.setTag(holder);
}
else
{
holder = (ViewHolder)row.getTag();
}
holder.persoName.setText(list.get(position).getName());
return row;
}
static class ViewHolder
{
TextView persoName;
}
}
这是微调器列表项的 xml 文件。
spinner_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:id="@+id/persoName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_weight="70"
android:text="Name"
android:textColor="#000000"
android:textSize="22sp"
android:textStyle="bold" />
</LinearLayout>
这里只给出了一个数据串的例子
那就这样用吧
private void loadSpinnerData() {
//database handler
LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext());
//spinner drop down elements
ArrayList<DataBean> list = db.getAllDat();
//creating adapter for spinner
MyAdapter<DataBean > dataAdapter = new MyAdapter<DataBean>(this, R.layout.spinner_list_item, list);
//drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
您可以参考这个link来查看如何使用自定义适配器。
您也可以简单地覆盖 DataBean
class 的 toString
方法和 return 要在 Spinner
中显示的文本。