【问题标题】:Homescreen widget, listView shows "Loading"主屏幕小部件,listView 显示“正在加载”
【发布时间】:2014-03-20 09:42:39
【问题描述】:

首先,一张图片说一千个字:

尽管 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 个项目肯定没有文本加载,我不知道这是从哪里来的。

有人能指出做错了什么吗?

谢谢

【问题讨论】:

    标签: android android-widget homescreen


    【解决方案1】:

    这个答案帮助了我 https://stackoverflow.com/a/23122006/2051381

    我必须从我的 remoteViewsFactory 类的 getViewTypeCount() 方法中返回 1 而不是 0

    【讨论】:

      【解决方案2】:

      检查您是否使用了不受支持的视图。

      就我而言,我在布局中使用View 作为分隔符。并没有意识到它不是supported views 之一。

      我刚刚删除了它,小部件按预期运行。

      【讨论】:

      • 如果你使用ListView,你可以使用它的divider属性来达到同样的效果。
      • 我知道,但是我从回收的视图中复制了布局,并认为不支持视图。
      【解决方案3】:

      我不得不删除

      android:minHeight="?attr/dropdownListPreferredItemHeight"
      

      从列表项的布局来完成这项工作

      【讨论】:

      • 哥们,此时此刻,你对我来说就像上帝一样
      【解决方案4】:

      我也是来这里说的: 我将列表项的背景设置为
      ?attr/selectableitembackground

      【讨论】:

        【解决方案5】:

        如果有人遇到与此相同的问题,并且您使用的是自定义启动器,请尝试使用默认启动器。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 2020-06-29
          • 1970-01-01
          相关资源
          最近更新 更多