AppCompat 包破坏Launcher Widget ,导致couldn't find any view, using error view
2017-08-01 10:55
459 查看
使用App Widget Host添加Widget,导致问题
运行项目后,跳转到选择Widget界面中,选择Play商店的widget,如下图所示 。
配置界面返回数据后,添加widget到布局中,突然报错,如下图所示。
这时候,查看日志和异常了解情况。
log步骤走向:
异常提示:
这是一个神奇的问题,选择某些widget会报错,某些widget不会报错。
原由:
解决方式:设置
Google大法的答案(完美解决):
在StackoverFlow上找到一个帖子,将Activity的context替换成程序的Context(即getApplicationContext())。
来源于,StackoverFlow的解决方式。
重新运行项目,效果如下:
android.support.v7.widget.AppCompatImageView can't use method with RemoteViews: setImageResource(int)。
运行项目后,跳转到选择Widget界面中,选择Play商店的widget,如下图所示 。
配置界面返回数据后,添加widget到布局中,突然报错,如下图所示。
这时候,查看日志和异常了解情况。
log步骤走向:
08-01 01:45:39.354 21467-21467/com.xingen.appwidgethost I/MainActivity: selectWidget() 开始转入选择界面 08-01 01:45:41.921 21467-21467/com.xingen.appwidgethost I/MainActivity: configureWidget 开启配置界面 08-01 01:45:41.986 21467-21467/com.xingen.appwidgethost I/MainActivity: createWidget 正在添加widget到布局中
异常提示:
AppWidgetHostView: updateAppWidget couldn't find any view, using error view android.widget.RemoteViews$ActionException: view: android.support.v7.widget.AppCompatImageView can't use method with RemoteViews: setImageResource(int) at android.widget.RemoteViews.getMethod(RemoteViews.java:855) at android.widget.RemoteViews.-wrap5(RemoteViews.java) at android.widget.RemoteViews$ReflectionAction.apply(RemoteViews.java:1410) at android.widget.RemoteViews.performApply(RemoteViews.java:3428) at android.widget.RemoteViews.apply(RemoteViews.java:3165) at android.appwidget.AppWidgetHostView.applyRemoteViews(AppWidgetHostView.java:451) at android.appwidget.AppWidgetHostView.updateAppWidget(AppWidgetHostView.java:380) at android.appwidget.AppWidgetHost.createView(AppWidgetHost.java:353)
这是一个神奇的问题,选择某些widget会报错,某些widget不会报错。
寻找解决方式
度娘答案(差强人意):原由:
根据android.support.v7.widget.AppCompatImageView 的介绍,在appcompat-v7(23.1.0)版本中是 失去了这个注解: @android.view.RemotableViewMethod for the following methods:setImageResource(int)、setBackgroundResource(int)
解决方式:设置
appcompat version to ‘com.android.support:appcompat-v7:23.0.1’或者更低版本。
Google大法的答案(完美解决):
在StackoverFlow上找到一个帖子,将Activity的context替换成程序的Context(即getApplicationContext())。
/** * 初始化appWidgetHost */ fun initAppWidgetHost() { this.mAppWidgetManager = AppWidgetManager.getInstance(applicationContext) /** * AppWidgetHost提供appwidget 服务与app交互。 * 例如:home screen嵌入widget. */ this.mAppWidgetHost = AppWidgetHost(applicationContext, R.id.APPWIDGET_HOST_ID) } /** * 创建widget,且添加到布局。 */ fun createWidget(data: Intent?){ //.......省略部分代码 var hostView=this.mAppWidgetHost?.createView(applicationContext,appWidgetId,appWidgetInfo) }
来源于,StackoverFlow的解决方式。
重新运行项目,效果如下:
相关文章推荐
- Python:Fatal error in launcher: Unable to create process using pip.exe
- pip Fatal error in launcher: Unable to create process using '"'
- Error: cannot be cast to android.widget.HeaderViewListAdapter
- [error] ResourceManager : unable to find resource ‘VM_global_library.vm’ in any resource loader.
- xml无法显示(Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again la
- To find sum of two numbers without using any operator. Only use of printf() is allowed.
- error: Couldn't find a setup script
- redis搭建集群ERROR: Could not find a valid gem 'redis-3.0.0' (>= 0) in any repository
- nodejs 运行后报错 Error: Couldn't find preset "es2015" relative to directory
- E/dalvikvm( 2456): ERROR: couldn't find native method
- Is there any way to get detailed error information for Win32 errors when using Platform Invoke?
- 解决“ERROR: couldn't find native method”方法
- D/ (15749): JNI_OnLoad E/dalvikvm(15749): ERROR: couldn't find native method
- 运行pip报错:Fatal error in launcher: Unable to create process using '"'
- 解决报错问题 Error inflating class android.support.design.widget.NavigationView
- Error using AnnotationMethodHandlerAdapter and UrlFilenameViewController
- BLDMAKE ERROR: Can't find any RVCT installation 解决办法
- 【Python错误】windows下使用pip/easy_install提示Fatal error in launcher: Unable to create process using...
- fatal error in launcher:unable to create process using 解决办法
- MYSQL连接Error (1133): Can’t find any matching row in the user table错误的解决办法