Android 创建适配器以使用对象填充微调器

Android 创建适配器以使用对象填充微调器,android,object,spinner,adapter,Android,Object,Spinner,Adapter,我有一个带有微调器的Android应用程序,希望用我自己的对象动态填充它。对象确实已作为列表存在 对象的类型为类别: public class Category implements Serializable { private Long id; private String name; // constructors // getter & setter // hashCode, equals // toString } 我知道我必须

我有一个带有
微调器的Android应用程序,希望用我自己的对象动态填充它。对象确实已作为
列表存在

对象的类型为
类别

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

    // constructors
    // getter & setter
    // hashCode, equals
    // toString
}

我知道我必须编写一个适配器。我该怎么做?我试着找一些例子。。。不走运。请给出建议。

我不确定这是否有帮助,但Android SDK有一个很好的例子,可以从数组向微调器提供数据。将列表转换为数组非常简单,因此这可能会为您指明正确的方向


祝你好运。

这是一个好机会。不要被“游标”名称所愚弄,它只是使用一个列表。想法很简单:从
BaseAdapter
扩展并实现任何缺少的方法(它是一个抽象类);不要忘记重写
getView()
方法,以提供您的
类别的“可视”表示。我也有类似的问题。我使用的是SimpleCrsorAdapter,它实现了接口SpinnerAdapter,但直到SDK版本11(Android 3.0)才出现。我打算让我的应用程序与SDK 8(Android 2.2)及更高版本一起工作,所以我不得不用另一个或我自己的应用程序来取代SimpleCorsorAdapter。真正的挑战是,我还为spinner使用了自定义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的适配器。最初使用的游标被转换为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;
    }
}
公共类MyCursorAdapter扩展BaseAdapter实现SpinnerAdapter{
私人活动;
私人名单;
公共MyCursorAdapter(活动,列表){
这个。活动=活动;
this.list\u bsl=list\u bsl;
}
public int getCount(){
返回列表_bsl.size();
}
公共对象getItem(int位置){
返回列表获取(位置);
}
公共长getItemId(int位置){
return list_bsl.get(position.getId();
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图自旋视图;
if(convertView==null){
LayoutInflater充气器=活动。getLayoutInflater();
spinView=充气机。充气(R.layout.spin_layout,null);
}否则{
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());
返回自旋视图;
}
}

与您在web上找到的其他解决方案不同,方法getItemId与数据库中的id字段建立链接,就像SimpleCrsorAdapter一样。该id是在微调器的OnItemSelectedListener.setOnItemSelectedListener中传入的参数(AdapterView arg0,视图arg1,int位置,longid)。方法getViewspin_layout.xml,标识布局中包含的两个视图,并将它们赋值(作为字符串!)。

该示例从布局中的数组填充微调器,而不是动态创建。这样的回答是毫无意义的!SimpleCursorAdapter位于android.support.v4软件包中,因此您可以直接使用它返回API 4。有关如何在不创建CustomAdapter的情况下执行此操作的完整解决方案,请查看以下答案: