2010-12-08 2 views
6

Я новичок в разработке Android. Я пытаюсь заполнить счетчик, используя SimpleAdapter. Но список счетчиков показывает пустой элемент. Когда я нажимаю любой элемент, его текст отображается правильно в Toast. Скажите, пожалуйста, какая проблема в моем коде ниже.Использование SimpleAdapter с Spinner

public void onCreate(Bundle savedInstanceState) { 

    private List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 

    String[] from = new String[] { "colorsData" }; 
    int[] to = new int[] { R.id.spinner }; 

    String[] colors = getResources().getStringArray(R.array.colorsData); 

    for (int i = 0; i < colors.length; i++) { 
    data.add(addData(colors[i])); 
    } 

    Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, android.R.layout.simple_spinner_item, from, to); 
    simpleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(simpleAdapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, 
    int position, long id) { 
    Toast.makeText(
     parent.getContext(), 
     "Selected Color:- " 
     + parent.getItemAtPosition(position), 
     Toast.LENGTH_LONG).show(); 
    } 
    }); 
} 

private Map<String, String> addData(String colorName) { 
    Map<String, String> mapList = new HashMap<String, String>(); 
    mapList.put("colorsData", colorName); 
    return mapList; 
} 
+0

С коротким взглядом на ваш вопрос, я не уверен, что вы действительно хотите получить. Но если вам нужны некоторые элементы пользовательского интерфейса, такие как страница конфигурации на Android. i.e: щелкните элемент в виде списка и выберите диалоговое окно, чтобы выбрать что-то, вы можете попробовать «Предпочтение». Предпочтение - это элементы пользовательского интерфейса для настройки вашего приложения. – 2010-12-08 05:45:24

ответ

5

Я около 95% уверен, что ваш to массив должен быть объявлен как:

int[] to = new int[] { android.R.id.text1 }; 

Дайте что попробовать.


EDIT (на основе комментариев ниже):

Кажется, там была ошибка в старых версиях AndroidOS, вызвавших что IllegalStateException. (Я не видел исключения в 2.2, но я видел его в 1.5 в эмуляторе.) Ошибка может быть решена путем добавления ViewBinder к SimpleAdapter. ViewBinder не сложно реализовать; вот пример:

SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() { 

     public boolean setViewValue(View view, Object data, 
       String textRepresentation) { 
      // We configured the SimpleAdapter to create TextViews (see 
      // the 'to' array), so this cast should be safe: 
      TextView textView = (TextView) view; 
      textView.setText(textRepresentation); 
      return true; 
     } 
    }; 
    simpleAdapter.setViewBinder(viewBinder); 

Я писал о этом here.

+0

Я попробовал. Но как только я нажимаю кнопку раскрывающегося списка счетчиков, он сбой с помощью IllegalStateException. – Chromium 2010-12-08 03:55:48