需要有关自定义 Spinner/ArrayAdapter 设置的帮助

发布于 2024-10-09 05:17:45 字数 967 浏览 4 评论 0原文

编辑:请忽略这个问题 - 我已经设法以一种适合我需要的方式解决它(请参阅下面我自己的答案)。

我有一个 WeatherSpinner 类,它扩展了 Spinner。该类显示了我最初使用 ArrayAdapter所做的区域名称,但现在我想使用 ArrayAdapter(Locale 是我的抽象“空”类)自己的)。

当尝试使用以下内容填充我的 ArrayAdapter 时,我收到 ClassCastException...

protected ArrayList<?> theList;
protected ArrayAdapter<Locale> aa = null;
...
protected void updateContents(ArrayList<?> list, int selectedItem) {
    theList = list;
    // Exception thrown on next line
    aa = new ArrayAdapter<Locale>(theContext, android.R.layout.simple_spinner_item,
        (Locale[]) theList.toArray());
    ...

}

我将 RegionList 对象作为“list”参数传递到 updateContents() 中RegionList 扩展了 ArrayList,并且 Region 扩展了 Locale。我还重写了 Region 的 toString() 方法以返回有效的字符串。

我在这里没有看到什么?我对 ArrayList.toArray() 工作方式的理解有误吗?

EDIT: Please ignore this question - I've managed to solve it in a way which works fine for what I need (see my own answer below).

I have a WeatherSpinner class which extends Spinner. The class shows region names which I originally did using an ArrayAdapter<String> but I now want to use ArrayAdapter<Locale>(Locale is an abstract 'empty' class of my own).

I'm getting a ClassCastException when trying to populate my ArrayAdapter with the following...

protected ArrayList<?> theList;
protected ArrayAdapter<Locale> aa = null;
...
protected void updateContents(ArrayList<?> list, int selectedItem) {
    theList = list;
    // Exception thrown on next line
    aa = new ArrayAdapter<Locale>(theContext, android.R.layout.simple_spinner_item,
        (Locale[]) theList.toArray());
    ...

}

I'm passing a RegionList object into updateContents() as the 'list' parameter and RegionList extends ArrayList<Region>, and Region extends Locale. I've also overriden Region's toString() method to return a valid String.

What am I not seeing here? Am I wrong about the way ArrayList<?>.toArray() works?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

仙气飘飘 2024-10-16 05:17:45

好的,解决了。

我需要使用 ArrayList 的 toArray(T[]contents) 方法,如下所示......

Locale[] locArray = new Locale[theList.size()];
locArray = (Locale[]) theList.toArray(locArray);
aa = new ArrayAdapter<Locale>(theContext, android.R.layout.simple_spinner_item,
        locArray);

OK, solved.

I needed to use the toArray(T[] contents) method of ArrayList as follows...

Locale[] locArray = new Locale[theList.size()];
locArray = (Locale[]) theList.toArray(locArray);
aa = new ArrayAdapter<Locale>(theContext, android.R.layout.simple_spinner_item,
        locArray);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文