主屏幕小部件,listView 显示“正在加载”

Posted

技术标签:

【中文标题】主屏幕小部件,listView 显示“正在加载”【英文标题】:Homescreen widget, listView shows "Loading" 【发布时间】: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_
    android:layout_
    android:orientation="horizontal"
    android:descendantFocusability="blocksDescendants">

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

</RelativeLayout>

我的 4 个项目肯定没有文本加载,我不知道这是从哪里来的。

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

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

我不得不删除

android:minHeight="?attr/dropdownListPreferredItemHeight"

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

【讨论】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于主屏幕小部件,listView 显示“正在加载”的主要内容,如果未能解决你的问题,请参考以下文章

颤动 - 是否可以在同一屏幕上沿ListView显示小部件?

如何在android中获取主屏幕小部件列表项的点击事件[重复]

如何在 Flutter 的同一屏幕上沿 ListView 显示小部件?

如何在小部件测试中找到屏幕外的 ListView 子项?

应用小部件仅在主屏幕上显示为灰色

listview.builder 不在屏幕上显示项目