Spinner 怎么实现绑定键值对

zhangmengxiong 2011-03-30 08:46:41
最近转向学习android开发了,灰常有必要补补基础知识,这不是,问题来了

spinner绑定数据源可以是.xml文件绑定,也可以是字符串数组绑定,但是我在网上找到的都是只能单个字符串拉上去,没有可以自定义的ID来识别;
这让很多的事情都不好办,比如说从数据库中提取的ID和String,不能自动的绑定上去

有一种解决方法是定义一个另外的数组,存放ID,然后根据对应的位置来取ID
public void onItemSelected(AdapterView<?> arg0, View view, int position, long id) {
Toast.makeText(getApplicationContext(), "Action Selected: position=" + position + " id=" + id, Toast.LENGTH_SHORT).show();
mPosition = position;
}


以上的position 可以取得到
但是个人觉得这个方法很不科学

现在想问一下有没有好一点的办法?
...全文
1454 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
寒月孤星love 2013-09-24
  • 打赏
  • 举报
回复
不错啊,解决问题了
wzxxzw5191 2012-02-08
  • 打赏
  • 举报
回复
多谢楼主这个贴~~~解决了我的难题~~~
hui119 2011-08-25
  • 打赏
  • 举报
回复
学习了
GoFlydream 2011-08-02
  • 打赏
  • 举报
回复
好东西,学习了
avi9111 2011-07-25
  • 打赏
  • 举报
回复
简单来说,就是要自己写咯
zyzcml 2011-07-08
  • 打赏
  • 举报
回复
本人遇到这个问题,用zhangmengxiong实现了,简单明了。现在把我的实现代码奉上


package com.gsww.androidoa.domain;

public class BrandInfo {
private String brandId;
private String brandName;
public String getBrandId() {
return brandId;
}
public void setBrandId(String brandId) {
this.brandId = brandId;
}
public String getBrandName() {
return brandName;
}
public void setBrandName(String brandName) {
this.brandName = brandName;
}
public BrandInfo(String brandId,String brandName){
this.brandId=brandId;
this.brandName=brandName;
}
@Override
public String toString() {//这是关键
//为什么要重写toString()呢?因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString()
// TODO Auto-generated method stub
return brandName;
}
}

//************************************************


List<BrandInfo> dataArray=new ArrayList<BrandInfo>();
String brandid;
String brandname;
List<String> list=new ArrayList<String>();
for(Iterator it = resultList.iterator();it.hasNext();){
Map resMap = (Map) it.next();
brandid = (String) resMap.get("brandid");
brandname = (String) resMap.get("brandname");
BrandInfo brandInfo=new BrandInfo(brandid,brandname);
dataArray.add(brandInfo);
list.add(brandname);

}
ArrayAdapter<BrandInfo> adapter = new ArrayAdapter<BrandInfo>(this.context,android.R.layout.simple_spinner_item,dataArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
brandSpinner.setAdapter(adapter);
brandSpinner.setPrompt("请选择品牌!");

傲慢的上校 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dinjay 的回复:]
spinner可以设置adapter的(setAdapter),你自己实现一个adapter就行了。adapter绑定数据用的。然后spinner设置adapter后就能显示了。至于怎么实现adapter,这个是基础,google一下吧,或者apidemos里也有很多例子,list里就有,list14.java
[/Quote] 恩使用adapter吧
dinjay 2011-03-31
  • 打赏
  • 举报
回复
spinner可以设置adapter的(setAdapter),你自己实现一个adapter就行了。adapter绑定数据用的。然后spinner设置adapter后就能显示了。至于怎么实现adapter,这个是基础,google一下吧,或者apidemos里也有很多例子,list里就有,list14.java
男主角 2011-03-31
  • 打赏
  • 举报
回复
重写bindView方法,我也是看大牛们讲的。
男主角 2011-03-31
  • 打赏
  • 举报
回复
这样就对应起来了 。通过写bindView方法,用个适配器
希望,你能,弄个完整的应用出来,包括xml,都贴上来。我也学习。学习

public class simpleCursorAdapter extends SimpleCursorAdapter 
{
public simpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
{
super(context, layout, c, from, to);
// TODO Auto-generated constructor stub
}

//重写bindView方法
public void bindView(View view, Context context, Cursor cursor)
{
//绑定数据到view ,test
TextView name = (TextView) view.findViewById(android.R.id.text1);
TextView message = (TextView) view.findViewById(android.R.id.text2 );

name.setText("剩余"+cursor.getString(1)+"小时"+cursor.getString(2)+"分钟");
//message.setText(cursor.getString(2));
//ItemCathe ic = new ItemCathe();
//设置tag标记行
view.setTag(cursor.getString(0));
message.setText(cursor.getString(3)+view.getTag());

super.bindView(view, context, cursor);
}

}
zhangmengxiong 2011-03-31
  • 打赏
  • 举报
回复
zhangmengxiong 2011-03-31
  • 打赏
  • 举报
回复
为了实现在android的spinner实现取VALUE值和TEXT值,我尝试过好些办法,在网上查的资料,都是说修改适配器,刚开始我也是通过修改适配器的方法来做的,但是如果一个activity有多个spinner,就需要多声明几个适配器的全局变量。后面查看适配器的源码发现,其实没有必要修改适配器,直接往适配器里面传对象,然后重写对象的toString()方法就可以简单解决。闲话少说,贴代码:

先声明一个对象,并重写对象的toString()。

public class CItem {

private String ID = "";
private String Value = "";

public CItem () {
ID = "";
Value = "";
}

public CItem (String _ID, String _Value) {
ID = _ID;
Value = _Value;
}

@Override
public String toString() { //为什么要重写toString()呢?因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString()
// TODO Auto-generated method stub
return Value;
}

public String GetID() {
return ID;
}

public String GetValue() {
return Value;
}
}



然后声明对象实例并加入到arraylist里面,并设置spinner的适配器

Spinner Sp = (Spinner).............//

List<CItem > lst = new ArrayList<CItem>();

CItem ct = new CItem ("1","测试");

lst.Add(ct);;

ArrayAdapter<CItem > Adapter = new ArrayAdapter<CItem>(context,
android.R.layout.simple_spinner_item, lst);

Sp.SetAdapter(Adapter);



取值:

如果取TEXT值则可以直接取:Sp.getSelectedItem.ToString()或者:((CItem)Sp.getSelectedItem). GetValue() ;

如果去Value值则可以这样取:((CItem)Sp.getSelectedItem).GetID();



写的比较简单,应该能够看的懂

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧