这是我5美分.我遇到了类似的问题.我正在使用SimpleCursorAdapter,它实现了SpinnerAdapter接口,但只到SDK版本11(Android 3.0)才到达.我打算将我的应用程序与SDK 8(Android 2.2)一起使用,因此我不得不将SimpleCursorAdapter替换为另一个或我自己的.真正的挑战者是我还为微调器使用了自定义XML布局,并在其中显示了光标的几个字段,即光标适配器.经过大量研究后,这是我的解决方案,而且信息并不容易.
以下是名为spin_layout.xml的微调器中使用的布局文件:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
android:id="@+id/field1"
android:textColor="#000"
android:gravity="center"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:textSize="24sp" />
android:id="@+id/field2"
android:textColor="#000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp" />
这是适配器实现SpinnerAdapter并扩展(使用作为小帮手)BaseAdapter.最初使用的Cursor被转换为List并在构造函数中传递,并与包含微调器的活动一起传递.
public class MyCursorAdapter extends BaseAdapter implements SpinnerAdapter{
private Activity activity;
private List list_bsl;
public MyCursorAdapter(Activity activity, List 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;
}
}
与您在Web上找到的其他解决方案不同,方法getItemId与数据库中的id字段建立链接,就像SimpleCursorAdapter一样.该id是onItemSelectedListener中onItemSelected(AdapterView arg0,View arg1,int position,long id)中为spinner.setOnItemSelectedListener传递的参数.方法getView膨胀spin_layout.xml,标识布局中包含的两个视图并为它们赋值(如String!).