当前位置: 首页 > 知识库问答 >
问题:

为什么我的自定义旋转器填充了我的包名?

傅元章
2023-03-14

@IsaAccisneros创建了新的SpinnerItem和MySpinnerAdapter类。我完全执行了他的新类。我的实现如下所示:

ArrayList<SpinnerItem> credValues = new ArrayList<SpinnerItem>();
         credValues.add(new SpinnerItem("3.0",false));
         credValues.add(new SpinnerItem("Credit", true));

         MySpinnerAdapter adapter_cred = new MySpinnerAdapter(this.getActivity(),
                 android.R.layout.simple_spinner_item, credValues);
         adapter_cred.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

         Spinner spinCred = (Spinner)rootView.findViewById(R.id.cred_spinner);
         spinCred.setAdapter(adapter_cred);
         spinCred.setSelection(credValues.size() - 1);

而他的长相是这样的:

ArrayList<SpinnerItem> items = new ArrayList<SpinnerItem>();
    items.add(new SpinnerItem("Item 1", false));
    items.add(new SpinnerItem("Item 2", false));
    items.add(new SpinnerItem("HINT", true)); // Last item 

    MySpinnerAdapter adapter = new MySpinnerAdapter(this, android.R.layout.simple_spinner_item, items);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setSelection(items.size() - 1);

那为什么我的行为怪异呢?我的代码的上下文是我的AddItemFragment在我的activity中的onCreateView。我说错了什么?谢谢!

编辑:已请求适配器类代码...

class SpinnerItem {
    private final String text;
    private final boolean isHint;

    public SpinnerItem(String strItem, boolean flag) {
        this.isHint = flag;
        this.text = strItem;
    }

    public String getItemString() {
        return text;
    }

    public boolean isHint() {
        return isHint;
    }
}

class MySpinnerAdapter extends ArrayAdapter<SpinnerItem> {
    public MySpinnerAdapter(Context context, int resource, List<SpinnerItem> objects) {
        super(context, resource, objects);
    }

    @Override
    public int getCount() {
        return super.getCount() - 1; // This makes the trick: do not show last item
    }

    @Override
    public SpinnerItem getItem(int position) {
        return super.getItem(position);
    }

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }
}

共有1个答案

贲功
2023-03-14

原因是您没有重写适配器的getView()方法。因此,它使用默认实现,如下所示:

T item = getItem(position);

if (item instanceof CharSequence) {
    text.setText((CharSequence)item);
} 
else {
    text.setText(item.toString());
}

SpinnerItem中,您没有ToString()方法,因此它使用默认值(即您看到的包名)

解决此问题的一种方法是将toString()方法添加到SpinnerItem中:

class SpinnerItem {
    private final String text;
    private final boolean isHint;

    public SpinnerItem(String strItem, boolean flag) {
        this.isHint = flag;
        this.text = strItem;
    }

    public String getItemString() {
        return text;
    }

    public boolean isHint() {
        return isHint;
    }

    @Override
    public String toString() {
        return text;
    }
}

如果您想要更多的控制,比如为提示文本设置不同的颜色等,我建议您自己实现getView()方法。

 类似资料:
  • 但是,这也不起作用。

  • 我已经为我的自定义日志拦截器执行了以下操作 我正在将拦截器设置为restTemboard 记录器正在将响应正确地打印到控制台,但最后响应会以空的形式返回给调用者。我无法调试和解决它。 我已经弄明白了StreamUtils。copyToString(response.getBody(),字符集。defaultCharset())正在读取一次输入流,并且不再在其中保存响应正文(现在为空) 还有谁也面临

  • 我正在尝试为Xamarin.Forms创建一个自定义的ButtonRenderer。下面是一个简单的测试,我一直在尝试根据一些教程组合起来,但我似乎可以使它工作。

  • 我有财产课: 还有一种方法: 在类的构造函数我有: 为什么当我从object按键调用函数时。我收到一条未定义的消息,为什么变量在内部不可用:

  • 问题内容: 我一直在跟随一个教程,教科书向我保证这可以工作,但是 错误:[ng:areq]参数’SimpleController’不是一个函数,未定义 为什么?我掉毛了,在它上面上下移动,看不到问题。为什么出现未定义状态? 问题答案: 我的猜测是您使用的angular.js版本是更新的。 有一个重大变化,即: 默认情况下 , angular将不再寻找控制器。有关更多详细信息,请参见3f2232b5

  • 我正在使用JPA2.1(由Hibernate4.2.11支持)和Spring4.0.2开发一个应用程序。我们正在使用Envers审核项目实体中的更改。这很好。当我们尝试使用自定义修订实体时,问题就出现了,正如Envers文档所述:http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-修正日志 正如