【问题标题】:Android Spinner not showing extra item's textAndroid Spinner 不显示额外项目的文本
【发布时间】:2016-10-03 23:44:27
【问题描述】:

编辑:原来问题出在 Material Spinner 库。当我使用 AppCompatSpinner 时,它工作正常。


上下文:我在摆弄this Material Spinner library。我扩展了 ArrayAdapter,所以我可以向它添加一个额外的项目(我希望将来最终将其转换为“添加新项目”按钮)。

问题:适配器正确地膨胀了额外的 TextView。它可以很好地检测文本的宽度。问题是文本本身没有出现。

尝试:我推测问题可能出在文本颜色上,因此我将主题更改为浅色(希望文本颜色显示为黑色),但没有奏效。我也尝试将 TextColor 设置为 Color.WHITE,但这也不起作用。然后我尝试使用来自 colors.xml 的颜色,但它当然没有用。我尝试将Alpha设置为1,没有用。


不完全确定问题出在哪里,所以我将在下面发布我的代码。

自定义适配器

public class TaskArrayAdapter extends ArrayAdapter<Task> {

public static final int VIEW_TYPE_ADD_ITEM = -1;
private static final int OFFSET = 1; // # of other view types

private List<Task> mTasks;

public TaskArrayAdapter(Context context, int resource, List<Task> tasks) {
    super(context, resource, tasks);
    mTasks = tasks;
}

@Override
public int getViewTypeCount() {
    //Workaround waiting for a Google correction (https://code.google.com/p/android/issues/detail?id=79011)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        return 1;
    }
    return super.getViewTypeCount();
}

@Override
public int getItemViewType(int position) {
    position = position - OFFSET;
    return (position == -1) ? VIEW_TYPE_ADD_ITEM : super.getItemViewType(position);
}

@Override
public int getCount() {
    return OFFSET + super.getCount();
}

@Override
public Task getItem(int position) {
    position = position - OFFSET;
    return (position == -1) ? null : super.getItem(position);
}

@Override
public long getItemId(int position) {
    position = position - OFFSET;
    return (position == -1) ? 0 : super.getItemId(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (getItemViewType(position) == VIEW_TYPE_ADD_ITEM) {
        final LayoutInflater inflater = LayoutInflater.from(getContext());
        final int resid = android.R.layout.simple_spinner_item;
        final TextView textView = (TextView) inflater.inflate(resid, parent, false);
        textView.setText("Testing Add New Item Here");
        textView.setTextColor(Color.WHITE);
        textView.setTag(VIEW_TYPE_ADD_ITEM);
        return textView;
    }
    return super.getView(position, convertView, parent);
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    if (getItemViewType(position) == VIEW_TYPE_ADD_ITEM) {
        final LayoutInflater inflater = LayoutInflater.from(getContext());
        final int resid = android.R.layout.simple_spinner_dropdown_item;
        final TextView textView = (TextView) inflater.inflate(resid, parent, false);
        textView.setText("Testing Add New Item Here");
        textView.setTextColor(Color.WHITE);
        textView.setTag(VIEW_TYPE_ADD_ITEM);
        return textView;
    }
    return super.getDropDownView(position, convertView, parent);
}

}

设置适配器

public void showTasks(List<Task> tasks) {
    final TaskArrayAdapter taskAdapter = new TaskArrayAdapter(this.getActivity(), android.R.layout.simple_spinner_item, tasks);
    taskAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mTaskSpinner.setAdapter(taskAdapter);
}

微调器:

<com.example.test.MaterialSpinner
        android:id="@+id/task_spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginStart="12dp"
        android:layout_marginEnd="12dp"
        android:paddingStart="8dp"
        android:paddingEnd="8dp"
        android:textAlignment="center"
        app:ms_multiline="false"
        app:ms_enableFloatingLabel="false"
        app:ms_enableErrorLabel="false"
        app:ms_floatingLabelText="floating label"
        app:ms_baseColor="@color/transparent_blue"
        app:ms_highlightColor="@color/md_purple_400"
        app:ms_errorColor="@color/error_color"
        app:ms_thickness="2dp"
        app:ms_alignLabels="false"/>

【问题讨论】:

    标签: android drop-down-menu spinner android-arrayadapter android-custom-view


    【解决方案1】:

    我已经运行了你的代码,它对我来说很好,有点。

    getView 用于单击微调器之前显示的视图 getDropdownView 用于在弹出窗口出现时重复的视图。

    所以您可能不希望 getView() 中的 getItemViewType 代码

    您能否展示可能影响微调器的主题/样式?

    【讨论】:

    • 我正在使用“Theme.AppCompat.NoActionBar”。除此之外,除了 MaterialSpinner 视图之外,我认为我没有对 Spinner 进行太多样式修改。
    • 啊抱歉,我错过了你使用图书馆的事实,我明天试试
    • 顺便说一句 - 有一个 AppCompat Spinner - developer.android.com/reference/android/support/v7/widget/…
    • 谢谢。我怀疑这个问题可能是由于图书馆造成的。我会试试普通的 Spinner。
    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    相关资源
    最近更新 更多