您的位置:首页 > 移动开发

AppCompat 包破坏Launcher Widget ,导致couldn't find any view, using error view

2017-08-01 10:55 459 查看
使用App Widget Host添加Widget,导致问题
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的解决方式

重新运行项目,效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐