在 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 中显示的文本。