10

覆盖.getDropDownView方法时,我遇到了一种奇怪的行为ArrayAdapter。我需要重写此方法,以便从我的自定义对象中显示正确的字符串值。这就是我的阵列适配器的样子:

ArrayAdapter<NoteType> adapter = new ArrayAdapter<NoteType>(this, android.R.layout.simple_spinner_item, lstNoteTypes){
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView lbl = (TextView) super.getView(position, convertView, parent);
        lbl.setText(getItem(position).getName());
        return lbl;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        TextView lbl = (TextView) super.getView(position, convertView, parent);
        lbl.setText(getItem(position).getName());
        return lbl;
    }
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

因此,当我覆盖时getDropDownView,我的 Spinner 如下所示 - 项目高度非常小,这不是我想要的:

在此处输入图像描述

但是当我评论(或不覆盖)该getDropDownView方法时,默认样式看起来很好,但是我无法将所需的文本值注入下拉项。 在此处输入图像描述

注意两个图像中项目的高度只是因为覆盖getDropDownView

有什么建议么?或者我的代码中缺少什么?

4

4 回答 4

3

如果您自己编写了 NoteType,请覆盖其中的 toString()。只需将以下内容添加到您的 NoteType 类:

@Override
public String toString() {
    return getName();
}
于 2013-09-19T13:53:14.310 回答
2

我想我可能知道为什么会发生这种情况,但我必须对其进行测试,所以现在这里是另一个(快速)解决方案。

由于对 中的每个对象的Spinner调用,您可以覆盖类中的方法并让它返回您的 String (而不是默认实现)。这样你就不必 在你的适配器中重写,但仍然有默认的样式和你的数据。 toString()ArrayAdaptertoString()NoteTypetoString()getDropDownView()

于 2013-09-19T13:53:31.723 回答
1

我在自定义 BaseAdapter 类中遇到了同样的问题。评论中也提到了这一点,但解决方案实际上非常简单——只需向从 getDropDownView 方法返回的 TextView 添加填充。

您不需要为此添加任何额外的文件,而且我没有使用 ActionBarSherlock(只是默认的 Spinner),所以我认为它与此无关。这是适用于我的代码,适用于您的示例:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Create custom TextView
    TextView lbl = (TextView) super.getView(position, convertView, parent);
    lbl.setText(getItem(position).getName());

    // Add padding to the TextView, scaled to device
    final float scale = context.getResources().getDisplayMetrics().density;
    int px = (int) (10 * scale + 0.5f);
    lbl.setPadding(px, px, px, px);

    return lbl;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    // Create custom TextView
    TextView lbl = (TextView) super.getView(position, convertView, parent);
    lbl.setText(getItem(position).getName());

    // Add padding to the TextView, scaled to device
    final float scale = context.getResources().getDisplayMetrics().density;
    int px = (int) (10 * scale + 0.5f);
    lbl.setPadding(px, px, px, px);

    return lbl
}
于 2014-07-24T16:36:16.640 回答
1

必须做同样的事情所以让我自己的视图被用作checkedTextView

在这最重要的是设置高度像这样 android:layout_height="?attr/dropdownListPreferredItemHeight" 我使用的是基本适配器

于 2015-06-04T07:53:18.750 回答