Подтвердить что ты не робот

TypedValue Преобразование в строку

В случайных точках, когда я использую свое приложение для Android, LogCat заливается десятками повторений следующих 5 строк:

10-26 12:53:30.372  21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b00d8}
10-26 12:53:30.372  21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x1d/d=0xffe51c23 a=2 r=0x7f090047}
10-26 12:53:30.374  21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b008a}
10-26 12:53:30.375  21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b00d6}
10-26 12:53:30.375  21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b00d7}

Используя информацию из принятого ответа на этот вопрос, я решил, что он пытается интерпретировать значения null (0x0) как booleans (0x12), что не имеет смысла, так как я никогда не имею дело ни с нулями, ни с булевыми.

Идентификаторы ресурсов из журналов (r = 0x?) указывают на представления/представления атрибутов в одном из двух макетов, которые я буду включать ниже.

Единственными местами в моем коде, где я ссылаюсь на эти идентификаторы ресурсов, являются: a) CursorAdapter, который использует первый макет, и b) класс, который использует второй макет, и я также включу этот код ниже.

Я не уверен, что это о чем беспокоиться. Я знаю, что корреляция не подразумевает причинности, но когда LogCat затоплен этими журналами, прокрутка через мое приложение заметно дергается.

Любая помощь в выяснении того, что происходит, будет оценена.

Файл макета # 1:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="72dp"
    android:padding="16dp">

    <TextView
        android:id="@+id/event_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:ellipsize="end"
        android:maxLines="1"
        android:text="Title"
        android:textSize="16sp"
        android:textColor="@color/primary_text_color"/>

    <TextView
        android:id="@+id/event_dates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@id/event_name"
        android:text="Dates"
        android:textColor="@color/secondary_text_color"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/event_location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/event_name"
        android:layout_toLeftOf="@id/event_dates"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Location"
        android:textColor="@color/secondary_text_color"
        android:textSize="14sp" />
</RelativeLayout>

Файл макета # 2:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/event_type"
        android:textSize="14sp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/primary"
        android:paddingLeft="16dp"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:text="Header"
        android:textColor="#FFFFFF" />
</LinearLayout>

CursorAdapter:

public class EventCursorAdapter extends CursorAdapter {

    public String getKey(int position) {
        Cursor c = getCursor();
        c.moveToPosition(position);
        return c.getString(c.getColumnIndex(Database.Events.KEY));
    }

    public EventCursorAdapter(Context context, Cursor c, int flags) {
        super(context, c, flags);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
        LayoutInflater inflater = LayoutInflater.from(context);
        return inflater.inflate(R.layout.list_item_event, viewGroup, false);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView dates = (TextView) view.findViewById(R.id.event_dates);
        Date startDate = null, endDate = null;
        Log.d(Constants.LOG_TAG, "Start: " + cursor.getString(cursor.getColumnIndex(Database.Events.START)));
        try {
            startDate = new Date(cursor.getLong(cursor.getColumnIndex(Database.Events.START)));
            endDate = new Date(cursor.getLong(cursor.getColumnIndex(Database.Events.END)));
        } catch (Exception e) {
            // Oops.
        }
        dates.setText(EventHelper.getDateString(startDate, endDate));

        TextView name = (TextView) view.findViewById(R.id.event_name);
        name.setText(cursor.getString(cursor.getColumnIndex(Database.Events.NAME)));

        TextView location = (TextView) view.findViewById(R.id.event_location);
        location.setText(cursor.getString(cursor.getColumnIndex(Database.Events.LOCATION)));
    }
}

Другой класс:

public class EventTypeHeader extends ListHeader {

    public EventTypeHeader(String title) {
        super(title);
    }

    @Override
    public View getView(Context c, LayoutInflater inflater, View convertView) {
        ViewHolder holder;
        if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) {
            convertView = inflater.inflate(R.layout.list_item_event_type_header, null);
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.event_type);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.text.setText(getText());

        return convertView;
    }

    private static class ViewHolder {
        TextView text;
    }
}

ИЗМЕНИТЬ

Я буду включать то, что ссылается на каждый идентификатор ресурса в моем файле макета

0x7f0b00d8: event_type

0xffe51c23: primary (основной цвет приложения)

0x7f0b008a: event_name

0x7f0b00d6: event_dates

0x7f0b00d7: event_location

Также обратите внимание, что это работает в 5.0 Preview. Тем не менее, я все еще видел эти журналы, когда я был в 4.4.4.

РЕДАКТИРОВАТЬ № 2

После поиска в исходном коде Android я обнаружил, что единственное место, где существует "Преобразование в String", находится в классе android.content.res.TypedArray.

Однако я даже не создаю экземпляр, не импортирую и не использую этот класс в моем проекте! Это просто становится более странным и более странным.

РЕДАКТИРОВАТЬ № 3

По просьбе комментатора я загрузил свои styles.xml и colors.xml в gist, который можно найти здесь.

4b9b3361

Ответ 1

Я отправил отчет об ошибке в команду Android, так как я все еще не мог объяснить или исправить эту проблему. Отчет об ошибках здесь. Один из комментаторов предложил снять флажок "Включить проверку атрибутов просмотра" в "Параметры разработчика". Вот и эта проблема теперь исправлена! Я не помню, чтобы когда-либо проверял это, что странно, но по крайней мере теперь я знаю, что вызывает эту проблему.