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的情况下执行此操作的完整解决方案,请查看以下答案: