API 8 中启用图标时 ListView 项目不显示文本

ListView item doesn't show text when icon enable in API 8

我在 API 8 设备 中的 ListView 有一个非常奇怪的错误。我有一个非常简单的文件对话框布局:

它在 API 15 的设备上工作正常。但是 HTC Desire API 8 将此对话框显示为:

所以我只能看到没有文件夹图标的元素(文件)的文本。 我只有在滚动列表时才能看到文件夹文本!

当我用 setVisibility(View.INVISIBLE) 隐藏图标时,文字随处可见。

我的适配器的一些代码:

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    if (viewBinder == null)
    {
        return super.getView(position, convertView, parent);
    }
    else
    {
        View view = convertView == null
                ? viewBinder.inflateView(position, mResource, mInflater, parent)
                : convertView;

        viewBinder.setViewValue(view, position, getItem(position));
        return view;
    }
}


        public View inflateView(final int position, final int defResource,
                final LayoutInflater inflater, final ViewGroup parent) {
            final boolean checkable =
                    isCheckable((T) getListAdapter().getItem(position));
            final View view = inflater.inflate(checkable ?
                                               R.layout.filepicker_listitem_checkable :
                                               R.layout.filepicker_listitem_dir,
                    parent, false);

            ViewHolder viewHolder = new ViewHolder();
            viewHolder.icon = view.findViewById(R.id.item_icon);

            viewHolder.text =
                    (TextView) view.findViewById(android.R.id.text1);
            if (checkable) {
                viewHolder.checkbox = (CheckedTextView) view
                        .findViewById(android.R.id.text1);
            } else {
                viewHolder.checkbox = null;
            }
            view.setTag(viewHolder);

            return view;
        }

public void setViewValue(final View view, final int position,
                final T data) {
            if (view.getTag() == null) {
                return;
            }

            ((ViewHolder) view.getTag()).text.setText(getName(data));

            ((ViewHolder) view.getTag()).icon.setVisibility(isDir(position, data) ? View.VISIBLE : View.GONE);

            if (((ViewHolder) view.getTag()).checkbox != null) {
                ((ViewHolder) view.getTag()).checkbox
                        .setChecked(checkedItems.get(position));
            }
        }

更新: filepicker_listitem_checkable.xml

<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="?android:listPreferredItemHeight"
android:orientation="horizontal"
android:background="@drawable/selectable_background_filepickertheme">


<ImageView
    android:id="@+id/item_icon"
    android:src="@drawable/ic_collections_collection_light"
    android:visibility="visible"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    tools:ignore="ContentDescription"
    android:adjustViewBounds="true"/>

<CheckedTextView
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="match_parent"
    style="?android:textAppearanceLarge"
    android:checked="false"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:padding="8dp"
    android:gravity="center_vertical"
    android:id="@android:id/text1"
    android:maxLines="1"
    android:ellipsize="end"
    android:singleLine="true"/>

filepicker_listitem_dir.xml:

<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="?android:listPreferredItemHeight"
android:orientation="horizontal"
android:background="@drawable/selectable_background_filepickertheme">

<ImageView
    android:id="@+id/item_icon"
    android:src="@drawable/ic_collections_collection_light"
    android:visibility="visible"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    tools:ignore="ContentDescription"
    android:adjustViewBounds="true"/>

<TextView
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="match_parent"
    style="?android:textAppearanceLarge"
    android:padding="8dp"
    android:gravity="center_vertical"
    android:id="@android:id/text1"
    android:maxLines="1"
    android:ellipsize="end"
    android:singleLine="true"
    android:text="@string/name"/>

在第一个示例中,文本似乎是黑色背景的白色,而在第二个示例中,文本是白色背景,没有 tex 。我的猜测是文本在那里,但它是白色的,所以它是不可见的。尝试将 TextView 颜色更改为黑色,或您想要的任何颜色,看看是否有所不同。尝试将以下内容添加到您的 TextView 布局中:android:textColor="@color/black"

另外我修复了这个错误!只需将 android:background="@android:color/transparent" 添加到列表项布局中的 TextViewCheckedTextView 元素。