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

Виджет Homescreen, listView показывает "Загрузка"

Чтобы начать, изображение произносит тысячи слов:

enter image description here

Это происходит, хотя getViewAt называется 4 элементами, так как мой размер курсора.

Здесь код:

public class WidgetService extends RemoteViewsService {
    @Override
    public RemoteViewsFactory onGetViewFactory(Intent intent) {
        System.out.println("Factory");
        return(new WidgetViewsFactory(this.getApplicationContext(), intent));
    }
}

Поставщик виджета:

public class WidgetViewsFactory implements RemoteViewsService.RemoteViewsFactory, LNTConstants
{   
    private Context context = null;

    ArrayList<DBItemModel> items;

    public WidgetViewsFactory(Context context, Intent intent) {
        this.context = context;

        Cursor c = Items.get(context, where);
        items = Items.getFromCursor(c);
    }

    @Override
    public void onCreate() {
        /*

        */
    }

    @Override
    public void onDestroy() {

    }

    @Override
    public int getCount() {
        if(items != null) {
            System.out.println("Count: " + items.size());
            return items.size();
        }
        return 0;
    }

    @Override
    public RemoteViews getViewAt(int position) {
        System.out.println("getViewAt: " + position);
        ItemBean item = items.get(position);

        RemoteViews row = new RemoteViews(context.getPackageName(), R.layout.item_list);
        row.setTextViewText(R.id.tvListItem, item.summary);

        System.out.println("Widget item title: " + item.summary);

        return row;
    }

    @Override
    public RemoteViews getLoadingView() {
        return null;
    }

    @Override
    public int getViewTypeCount() {
        return 1;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public void onDataSetChanged() {
        // no-op
    }
}

Разметка:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:descendantFocusability="blocksDescendants">

    <TextView
        android:id="@+id/tvListItem"
        style="@style/text_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:minHeight="?attr/dropdownListPreferredItemHeight" />

</RelativeLayout>

У моих 4 элементов определенно нет загрузки текста, и я не знаю, откуда это происходит.

Может ли кто-нибудь указать, что я делаю неправильно?

Спасибо

4b9b3361

Ответ 1

Мне пришлось удалить

android:minHeight="?attr/dropdownListPreferredItemHeight"

из макета элемента списка, чтобы сделать эту работу

Ответ 2

Этот ответ помог мне fooobar.com/questions/612025/...

Мне пришлось возвращать 1 вместо 0 из метода getViewTypeCount() моего класса remoteViewsFactory

Ответ 3

Проверьте, используете ли вы не поддерживаемое представление.

В моем случае я использовал View в своем макете как разделитель. и не понимал, что это не один из поддерживаемых просмотров.

Я просто удалил его, и виджет вел себя так, как ожидалось.

Ответ 4

Я также пришел сюда, чтобы сказать это: Я установил фон элемента списка на
?attr/selectableitembackground

Ответ 5

Если у кого-то такая же проблема, как эта, и если вы используете настраиваемый модуль запуска, попробуйте вместо этого использовать модуль запуска по умолчанию.