【问题标题】:Using SimpleAdapter with Spinner将 SimpleAdapter 与 Spinner 一起使用
【发布时间】:2010-12-08 03:31:33
【问题描述】:

我是 Android 开发新手。我正在尝试使用 SimpleAdapter 填充微调器。但微调器的列表显示空白元素。当我单击任何元素时,其文本会在 Toast 中正确显示。请告诉我下面的代码有什么问题。

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

【问题讨论】:

  • 看了一眼您的问题,我不确定您真正想要得到什么。但是如果你想要一些 UI 元素,比如 Android 中的配置页面。即:单击列表视图中的项目并弹出对话框以选择某些内容,您可以尝试“首选项”。 Preference 是用于配置您的应用的一系列 UI 元素。

标签: android spinner simpleadapter


【解决方案1】:

我有 95% 的把握将您的 to 数组声明为:

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

试试看。


编辑(基于下面的 cmets):

在旧版本的 AndroidOS 中似乎存在导致 IllegalStateException 的错误。 (我在 2.2 中没有看到异常,但在模拟器中的 1.5 中确实看到了它。)可以通过向 SimpleAdapter 添加 ViewBinder 来解决该错误。 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

【讨论】:

  • 我试过了。但是,一旦我单击微调器下拉按钮,它就会因 IllegalStateException 而崩溃。
  • 但是您现在真的看到文本标签了吗?我认为该异常意味着创建适配器后data 列表中的某些内容发生了变化。这可能吗?
  • 不,我不会更改数据列表。我现在想知道是否可以使用 SimpleAdapter 来填充微调器。
  • 嗯。我想知道为什么你不只使用ArrayAdapter,而是使用从getStringArray() 返回的数组。但是如果你想继续使用SimpleAdapter,看看这个问题(code.google.com/p/android/issues/detail?id=7251)——你可能需要在适配器上设置一个ViewBinder
  • 我想,我唯一的选择就是使用 ArrayAdapter。对于像我这样的初学者来说,这种 ViewBinder 有点复杂。感谢您的快速回复和指导。我希望将来也一样。 :-)
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多