创建适配器以使用对象填充Spinner

Dan*_*tik 3 android object adapter spinner

我有一个Android应用程序,Spinner并希望用我自己的对象动态填充它.这些对象确实已经存在List<T>.

对象的类型Category如下:

public class Category implements Serializable {
    private Long id;
    private String name;

    // constructors
    // getter & setter
    // hashCode, equals
    // toString
}
Run Code Online (Sandbox Code Playgroud)

我知道我必须写一个适配器.我怎么做?我试图找一些例子......没有运气.请指教.

MSq*_*are 12

这是我5美分.我遇到了类似的问题.我正在使用SimpleCursorAdapter,它实现了SpinnerAdapter接口,但只到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>
Run Code Online (Sandbox Code Playgroud)

这是适配器实现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;
    }
}
Run Code Online (Sandbox Code Playgroud)

与您在Web上找到的其他解决方案不同,方法getItemId与数据库中的id字段建立链接,就像SimpleCursorAdapter一样.该id是onItemSelectedListeneronItemSelected(AdapterView arg0,View arg1,int position,long id)中为spinner.setOnItemSelectedListener传递的参数.方法getView膨胀spin_layout.xml,标识布局中包含的两个视图并为它们赋值(如String!).