这是我的 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 并与包含微调器的 Activity 一起传入构造函数。
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;
}
}
与您在网上找到的其他解决方案不同,方法获取项目ID建立链接id来自数据库的字段,就像 SimpleCursorAdapter 一样。该 id 是传入的参数选中的项目(AdapterView arg0, View arg1, int 位置, longid) 在 OnItemSelectedListener 中spinner.setOnItemSelectedListener。方法getView膨胀的spin_layout.xml,标识布局中包含的两个视图并为它们分配值(作为字符串!)。