Android 主屏幕小部件,listView显示;“装载”;

Android 主屏幕小部件,listView显示;“装载”;,android,android-widget,homescreen,Android,Android Widget,Homescreen,首先,一张图片上写着千言万语: 尽管getViewAt被称为4个项目(正如我的光标大小一样),但仍会发生这种情况 代码如下: public class WidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { System.out.println("Factory"); retur

首先,一张图片上写着千言万语:

尽管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
    }
}
公共类WidgetViewsFactory实现RemoteViewsService.RemoteViewsFactory,LNTConstants
{   
私有上下文=null;
数组列表项;
公共WidgetViewsFactory(上下文、意图){
this.context=上下文;
游标c=Items.get(上下文,其中);
items=items.getFromCursor(c);
}
@凌驾
public void onCreate(){
/*
*/
}
@凌驾
公共空间{
}
@凌驾
public int getCount(){
如果(项!=null){
System.out.println(“Count:+items.size());
返回items.size();
}
返回0;
}
@凌驾
公共远程视图getViewAt(内部位置){
System.out.println(“getViewAt:+位置”);
ItemBean item=items.get(位置);
RemoteViews行=新的RemoteView(context.getPackageName(),R.layout.item_列表);
row.setTextViewText(R.id.tvListItem,item.summary);
System.out.println(“小部件项标题:“+item.summary”);
返回行;
}
@凌驾
公共远程视图getLoadingView(){
返回null;
}
@凌驾
public int getViewTypeCount(){
返回1;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共布尔表ID(){
返回false;
}
@凌驾
公共无效onDataSetChanged(){
//无操作
}
}
布局:

<?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:minHeight="?attr/dropdownListPreferredItemHeight"
从列表项的布局中,这个答案帮助了我


我必须从remoteViewsFactory类的getViewTypeCount()方法返回1而不是0检查您是否使用了不受支持的视图

在我的例子中,我在布局中使用了
View
作为分隔符。但我不知道这不是最重要的


我刚刚删除了它,小部件的行为符合预期。

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

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

伙计,如果您使用的是
列表视图
,您现在对我来说就像上帝一样,你可以使用它的分隔符属性来实现。我知道,但是我从回收的视图中复制了布局,并没有考虑视图不会被支持。同样的,谢谢人类。