这是我的5美分。我有类似的问题。我正在使用实现接口SpinnerAdapter的SimpleCursorAdapter,但是直到SDK版本11(Android 3.0)才到达。我打算我的应用程序使用SDK 8(Android 2.2)以上,所以我不得不用另一个或我自己的SimpleCursorAdapter。真正的挑战者是我还为微调器使用了自定义XML布局,并在其中显示了来自游标的多个字段,即游标适配器。所以这里是经过大量研究后的解决方案,而且信息并不容易。
这是在一个名为spin_layout.xml微调使用的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/field1"
android:textColor="#000"
android:gravity="center"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:textSize="24sp" />
<TextView
android:id="@+id/field2"
android:textColor="#000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp" />
</LinearLayout>
这里是实现SpinnerAdapter和延长(使用作为一个小帮手)BaseAdapter适配器。最初使用的Cursor被转换为List,并在构造函数中传递,并与包含微调器的活动一起传递。
public class MyCursorAdapter extends BaseAdapter implements SpinnerAdapter{
private Activity activity;
private List<BusLines> list_bsl;
public MyCursorAdapter(Activity activity, List<BusLines> list_bsl){
this.activity = activity;
this.list_bsl = list_bsl;
}
public int getCount() {
return list_bsl.size();
}
public Object getItem(int position) {
return list_bsl.get(position);
}
public long getItemId(int position) {
return list_bsl.get(position).getId();
}
public View getView(int position, View convertView, ViewGroup parent) {
View spinView;
if(convertView == null){
LayoutInflater inflater = activity.getLayoutInflater();
spinView = inflater.inflate(R.layout.spin_layout, null);
} else {
spinView = convertView;
}
TextView t1 = (TextView) spinView.findViewById(R.id.field1);
TextView t2 = (TextView) spinView.findViewById(R.id.field2);
t1.setText(String.valueOf(list_bsl.get(position).getLine_Num()));
t2.setText(list_bsl.get(position).getName());
return spinView;
}
}
不像在网络上找到其他的解决方案,方法getItemId建立与ID从数据库字段,就像SimpleCursorAdapter链接。该ID是onItemSelected(AdapterView arg0,View arg1,int position,long id)在OnItemSelectedListener中传递的参数spinner.setOnItemSelectedListener。方法getView inflated spin_layout.xml,标识布局中包含的两个视图并为它们赋值(如String!)。
查看以下答案,了解如何在不创建* CustomAdapter *的情况下执行此操作的完整解决方案:http://stackoverflow.com/a/21169383/293280 –