Вопрос

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

 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;
 }
Это было полезно?

Решение

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

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

Попробуйте.


РЕДАКТИРОВАТЬ (на основе комментариев ниже):

Похоже, была ошибка в более старых версиях Androidos, которая вызвала это нелегальное статеэксплекс. (Я не видел исключения в 2.2, но я увидел его в 1,5 в эмуляторе.) Ошибка может быть оборвана, добавив звено -килограмм в 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);

Я в блоге об этом здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top