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

时间:2015-01-16 13:44:16

标签: android listview

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

file dialog picture

它在使用API​​ 15的设备上运行良好。但带有API 8的HTC Desire将此对话框显示为:

enter image description here

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

当我使用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"/>

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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