带有ListView的Android Widget仅显示加载视图

 漫漫瞹fyS-1908 发布于 2022-12-19 13:00

我正在尝试使用ListView实现Android App Widget.我开始关注Google文档但是我遇到了正在显示的加载视图列表,而不是正常的列表项.有没有人有小部件列表视图的经验?

代码与Google文档中的代码相同.我使用ListView而不是StackView作为数据源我使用数据库(这不是问题,数据是正确获得的 - 我通过返回正常的列表项视图而不是默认的加载视图尝试了这一点)

搜索互联网没有帮助我...我也试过这个教程,但它也没有用.我希望有人可以帮助我,提前谢谢!

WidgetProvider.java

public class WidgetProvider extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        for (int i = 0; i < appWidgetIds.length; i++) {

            Intent intent = new Intent(context, EventWidgetService.class);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget);
            rv.setRemoteAdapter(android.R.id.list, intent);
            rv.setEmptyView(android.R.id.list, R.id.tvEmptyList);

            appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
        }

        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
}

WidgetService.java

public class EventWidgetService extends RemoteViewsService {

    @Override
    public RemoteViewsFactory onGetViewFactory(Intent intent) {

         return new EventsWidgetListProvider(getApplicationContext(), intent);
    }
}

WidgetListProvider

public class EventsWidgetListProvider implements RemoteViewsFactory {

    private List<> _entities = new ArrayList<>();
    private Context _context;
//  private int _appWidgetId;

    public EventsWidgetListProvider(Context context, Intent intent) {

        _context = context;
//      _appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    }

    @Override
    public void onCreate() { }

    private void refreshEntities() {

        // Request data from database
        _entities = RequestResult;
    }

    @Override
    public RemoteViews getViewAt(int position) {

        final RemoteViews remoteViews = new RemoteViews(_context.getPackageName(), R.layout.list_row);

        // Set data to remoteViews [remoteViews.setTextViewText(), remoteViews.setImageViewResource()]

        return remoteViews;
    }

    @Override
    public int getCount() {

        return _entities.size();
    }

    @Override
    public long getItemId(int position) {

        return position;
    }

    @Override
    public void onDataSetChanged() {

        refreshEntities();
    }

    @Override
    public void onDestroy() { }

    @Override
    public RemoteViews getLoadingView() {

        return new RemoteViews(_context.getPackageName(), R.layout.widget_loading);
    }

    @Override
    public int getViewTypeCount() {

        return 0;
    }

    @Override
    public boolean hasStableIds() {

        return false;
    }
}

ianhanniball.. 5

你的getViewTypeCount回报0.根据文件:

如果适配器始终为所有项返回相同类型的View,则此方法应返回1.

通过返回0,您告诉系统您没有要显示的视图类型.

1 个回答
  • 你的getViewTypeCount回报0.根据文件:

    如果适配器始终为所有项返回相同类型的View,则此方法应返回1.

    通过返回0,您告诉系统您没有要显示的视图类型.

    2022-12-19 13:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有