Android Spinner получает выбранное значение OnSelectedItemListener (); - PullRequest
1 голос
/ 03 ноября 2011

У меня проблема с получением значения, выбранного для счетчика.вот мой код и адаптер.

Прослушиватель событий Spinner

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();
}

});

CategoryAdapter

public class ReminderCategoryAdapter extends SimpleAdapter{

    Context c;

    public ReminderCategoryAdapter(Context context, List<? extends Map<String, ?>> data,
            int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        c = context;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            LayoutInflater li = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = li.inflate(R.layout.list_layout,null);
        }

        HashMap<String, Object> data = (HashMap<String, Object>) getItem(position);

        ((TextView) convertView.findViewById(R.id.category)).setText((String) data.get("Category"));
        ((TextView) convertView.findViewById(R.id.category)).setTag((Object) data.get("Category"));

        return convertView;
    }
}

для моего Spinner, в адаптере я надуваю Image + Text, мойвертушка работает найти, при этом я иллюстрирую мой счетчик

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

| Icon1 Text1 |

| Icon2 Text2 |

| Icon3 Text3 |

, но как только я пытаюсь использовать onitemselectedlistener и использовать метод getSelectedItem (). ToString () и toastИтак, возвращаемое значение на тосте - это сочетание значка и текста, я не хочу, чтобы возвращалось значение значка, но я хочу только строку или текст.Я пытался использовать метод setTag (значение объекта) с помощью ((TextView) convertView.findViewById (R.id.category)). SetTag ((Object) data.get ("Category"));в адаптере, а при использовании метода getTag () в слушателе выдается исключение nullpointer.Вместо использования метода getItemPosition (position) или getSelectedItem (), есть ли другое решение для получения и манипулирования строковым значением для выбранного Item?Пожалуйста, помогите.

1 Ответ

2 голосов
/ 03 ноября 2011

Одним из решений, которое вы можете легко использовать, является использование метода Spinner # getSelectedItemPosition ().Этот метод возвращает позицию выбранного элемента, и вы можете извлечь сам элемент из списка, который вы передаете адаптеру.

Таким образом, в принципе замените следующую строку в вашем методе onItemSelected:

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

с:

String selected = list.get(category.getSelectedItemItemPosition()).get("Category");
...