Android微调器在SelectEditemListener()上获取选定值;

Android微调器在SelectEditemListener()上获取选定值;,android,event-handling,android-widget,android-spinner,Android,Event Handling,Android Widget,Android Spinner,我在获取为微调器选择的值时遇到问题。这是我的代码和适配器 微调器事件侦听器 category = (Spinner) findViewById(R.id.Spinner); category.setPrompt("Select Category.."); ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

我在获取为微调器选择的值时遇到问题。这是我的代码和适配器

微调器事件侦听器

category = (Spinner) findViewById(R.id.Spinner);
category.setPrompt("Select Category..");
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();                                     
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("Category", "Choose a Category");
list.add(map);

map = new HashMap<String, Object>();
map.put("Icon", R.drawable.icon1);
map.put("Category", "Category1");
list.add(map);

map = new HashMap<String, Object>();
map.put("Icon", R.drawable.icon2);  
map.put("Category", "Category2");                                                                       
list.add(map);

map = new HashMap<String,Object>();
map.put("Icon", R.drawable.icon3);
map.put("Category", "Category3");                                                                               
list.add(map);
CategoryAdapter adapter = new CategoryAdapter(v.getContext(), list,R.layout.list_layout, new String[] { "Category", "Icon" }, new int[] { R.id.category, R.id.icon });
category.setAdapter(adapter);   

category.setOnItemSelectedListener(new OnItemSelectedListener(){

@Override
public void onItemSelected(AdapterView<?> arg0,View v, int arg2,long arg3) {
    // TODO Auto-generated method stub
    String selected = category.getSelectedItem().toString();
    //String selected = category.getTag().toString();
    try{
        //String selected = category.getSelectedItem().toString();
        //Object selected = arg0.getTag();
        //Toast.makeText(getApplicationContext(), String.valueOf(selected), Toast.LENGTH_SHORT).show();
        if(selected.toString().equals("Category1")){
            String msg1 = "Category1 type selected";
            Toast.makeText(getApplicationContext(), msg1 + " " + selected, Toast.LENGTH_SHORT).show();
        }else if(selected.toString().equals("Category2")){
            String msg2 = "Category2 type selected";
            Toast.makeText(getApplicationContext(), msg2 +  " " + selected, Toast.LENGTH_SHORT).show();
        }else if(selected.toString().equals("Category3")){
            String msg3 = "Category3 type selected";
            Toast.makeText(getApplicationContext(), msg3 + " " + selected, Toast.LENGTH_SHORT).show();
        }
    }catch(Exception e){
        Toast.makeText(getApplicationContext(),"Error occured " + e.getName().getClass(), Toast.LENGTH_SHORT).show();
    }                                                                                               
}

@Override
public void onNothingSelected(
        AdapterView<?> arg0) {
    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(), "nothing selected", Toast.LENGTH_SHORT).show();
}

});
category=(微调器)findViewById(R.id.Spinner);
category.setPrompt(“选择类别…”);
ArrayList=新建ArrayList();
HashMap=newHashMap();
地图。放置(“类别”,“选择类别”);
列表。添加(地图);
map=新的HashMap();
地图放置(“图标”,R.drawable.icon1);
地图放置(“类别”、“类别1”);
列表。添加(地图);
map=新的HashMap();
地图放置(“图标”,R.drawable.icon2);
地图放置(“类别”、“类别2”);
列表。添加(地图);
map=新的HashMap();
地图放置(“图标”,R.drawable.icon3);
地图放置(“类别”、“类别3”);
列表。添加(地图);
CategoryAdapter=new CategoryAdapter(v.getContext(),list,R.layout.list_layout,新字符串[]{“Category”,“Icon”},新int[]{R.id.Category,R.id.Icon});
类别.设置适配器(适配器);
category.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图v、内部arg2、长arg3){
//TODO自动生成的方法存根
所选字符串=category.getSelectedItem().toString();
//所选字符串=category.getTag().toString();
试一试{
//所选字符串=category.getSelectedItem().toString();
//所选对象=arg0.getTag();
//Toast.makeText(getApplicationContext(),String.valueOf(selected),Toast.LENGTH_SHORT.show();
if(selected.toString().equals(“Category1”)){
字符串msg1=“已选择类别1类型”;
Toast.makeText(getApplicationContext(),msg1+“”+选中,Toast.LENGTH\u SHORT.show();
}else if(selected.toString().equals(“Category2”)){
字符串msg2=“已选择类别2类型”;
Toast.makeText(getApplicationContext(),msg2+“”+选中,Toast.LENGTH\u SHORT.show();
}else if(selected.toString().equals(“Category3”)){
字符串msg3=“已选择类别3类型”;
Toast.makeText(getApplicationContext(),msg3+“”+选中,Toast.LENGTH\u SHORT.show();
}
}捕获(例外e){
Toast.makeText(getApplicationContext(),“出错”+e.getName().getClass(),Toast.LENGTH_SHORT).show();
}                                                                                               
}
@凌驾
无选举权的公共无效(
适配器视图arg0){
//TODO自动生成的方法存根
Toast.makeText(getApplicationContext(),“未选择任何内容”,Toast.LENGTH\u SHORT.show();
}
});
类别适配器
公共类提醒CategoryAdapter扩展了SimpleAdapter{
上下文c;
公共提醒分类适配器(上下文,列表>数据,
int资源,字符串[]从,int[]到){
超级(上下文、数据、资源、从、到);
c=上下文;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
LayoutInflater li=(LayoutInflater)c.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
convertView=li.充气(R.布局.列表\u布局,空);
}
HashMap数据=(HashMap)getItem(位置);
((TextView)convertView.findViewById(R.id.category)).setText((String)data.get(“category”);
((TextView)convertView.findViewById(R.id.category)).setTag((Object)data.get(“category”);
返回视图;
}
}
对于我的微调器,在适配器中,我对图像+文本进行充气,我的微调器正在工作,我在此演示我的微调器

============================

|Icon1文本1| |Icon2文本2| |Icon3文本3| 但一旦我尝试使用onitemselectedlistener并使用getSelectedItem().toString()方法并toast它,toast上返回的值是图标和文本的组合,我不希望图标的值返回,但我只想要字符串或文本。我尝试使用setTag(对象值)方法使用((TextView)convertView.findViewById(R.id.category)).setTag((Object)data.get(“category”);在适配器中,以及在侦听器中使用getTag()方法时引发nullpointer异常。除了使用getItemPosition(position)或getSelectedItem()方法外,还有其他解决方案可以获取和操作选定项的字符串值吗?
请提供帮助。

您可以轻松使用的一种解决方案是使用微调器#getSelectedItemPosition()方法。此方法将返回所选项目的位置,您可以从传递给适配器的列表中检索项目本身

因此,基本上,在所选方法中替换以下行:

String selected = category.getSelectedItem().toString();
与:


为了进一步解释这一点,
category.getSelectedItem()
返回一个映射实例。这就是为什么执行
toString()
不起作用的原因。如果执行
category.getSelectedItem().get(“category”)
操作,您将在映射中获得该键的值。
String selected = category.getSelectedItem().toString();
String selected = list.get(category.getSelectedItemItemPosition()).get("Category");