在 Android 中单击下拉菜单时,带有客户适配器的微调器抛出 Resources$NotFoundException

Spinner with customer adapter throwing Resources$NotFoundException when dropdown is clicked in Android

我正在开发一个 Android 应用程序。在我的应用程序中,我正在使用微调器视图。但是我正在使用带有自定义适配器的微调器视图,因为我的微调器很快就会变得更加复杂。 spinner 的所有数据都来自服务器通过 volley。我的带有客户适配器的微调器视图正确显示了数据。但问题是当我单击下拉菜单选择项目时。它抛出异常。

这是我的旋转视图客户适配器:

public class SpinnerItemAdapter extends ArrayAdapter<NVItem> {
    private ArrayList<NVItem> values;
    private Context context;
    private ArrayList<String> selectedValues;

    static class ViewHolder{
        public RadioButton radioButton;
        public TextView title;
    }

    public SpinnerItemAdapter(Context contextParam,ArrayList<NVItem> itemsParam,ArrayList<String> selectedParam)
    {
        super(contextParam,-1,itemsParam);
        this.values = itemsParam;
        this.context = contextParam;
        this.selectedValues = selectedParam;
    }

    @Override
    public View getView(final int position,View convertView,ViewGroup parent)
    {
        View rowView = convertView;
        final ViewHolder viewHolder;
        if(rowView==null)
        {
            LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = layoutInflater.inflate(R.layout.spinner_item,null);

            viewHolder = new ViewHolder();
            viewHolder.radioButton = (RadioButton)rowView.findViewById(R.id.spinner_item_radio);
            viewHolder.title = (TextView)rowView.findViewById(R.id.spinner_item_title);
            rowView.setTag(viewHolder);
        }
        else{
            viewHolder  = (ViewHolder) rowView.getTag();
        }

        //rowView.setId(values.get(position).getId());
        viewHolder.title.setText(values.get(position).getName());
        return rowView;
    }

    @Override
    public int getCount() { return values.size(); }
    @Override
    public NVItem getItem(int position) { return values.get(position); }
    @Override
    public long getItemId(int position) { return position; }
}

这就是我在 Android 中打开微调器对话框并在单击按钮时设置适配器的方式:

private void showCategorySpinner()
    {
        View view = layoutInflater.inflate(R.layout.choose_spinner,null);
        Spinner categorySpinner = (Spinner)view.findViewById(R.id.chooser_spinner);
        ArrayList<NVItem> items = new ArrayList<NVItem>();
        for(int i=0;i<categoryItems.size();i++)
        {
            NVItem item = new NVItem();
            item.setId(categoryItems.get(i).getId());
            item.setName(categoryItems.get(i).getName());
            items.add(item);
        }
        ArrayAdapter adapter = new SpinnerItemAdapter(getBaseContext(),items,new ArrayList<String>());
        categorySpinner.setAdapter(adapter);
        AlertDialog.Builder b = new AlertDialog.Builder(CreateItemActivity.this);
        b.setView(view);
        b.show();
    }

单击打开微调器对话框的按钮时调用上述函数。

所有绑定到微调器和打开微调器对话框的数据都可以找到。如下面的屏幕截图所示。但是点击截图中圈出的按钮会报错

这是截图:

这是 logcat 单击下拉箭头时出现的错误:

03-17 22:26:37.925 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion W/EGL_genymotion: eglSurfaceAttrib not implemented
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion W/ResourceType: No known package when getting value for resource number 0xffffffff
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion D/AndroidRuntime: Shutting down VM
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa61c8908)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime: FATAL EXCEPTION: main
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.content.res.Resources.getValue(Resources.java:1014)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2139)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.content.res.Resources.getLayout(Resources.java:853)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:415)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:737)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:733)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.widget.Spinner.measureContentWidth(Spinner.java:681)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.widget.Spinner$DropdownPopup.show(Spinner.java:959)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.widget.Spinner.performClick(Spinner.java:609)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:17355)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:725)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:92)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5041)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:511)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-17 22:29:01.685 32568-32568/com.blog.waiyanhein.mmfashion.mmfashion E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

我的代码有什么问题?

编辑

当我像这样更改 Adapter 的构造函数时

super(contextParam,R.layout.support_simple_spinner_dropdown_item,valuesParam);

列表项如下图所示。

除了在适配器中实现 getDropDownView() 外,无需更改适配器 -

@Override
     public View getDropDownView(int position, View convertView,
             ViewGroup parent) {
      LayoutInflater inflater = getLayoutInflater(); 
      View dropDownView = inflater.inflate(R.layout.dropdown, parent, false);

      TextView view1 = (TextView)dropDownView.findViewById(<view_id>);
      view1.setText(values.get(position).getName());

      return dropDownView;

     }

其中 R.layout.dropdown 是下拉菜单的布局 xml view.It 可以是任何 UI - 简单或复杂。