我为
Android应用程序创建小部件(当然是Java).我有从布局创建的经典RemoteViews(使用布局ID)
RemoteViews rv = new RemoteViews(context.getPackageName(),R.layout.view);
我需要编辑或更改视图(通过id识别).在经典View中使用findViewById函数很容易.
View v = ... //inflate layout R.layout.view View my = v.findViewById(R.id.myViewId); processView(my); //filling view
但是RemoteViews不支持它.可以使用apply()获取视图,但是在processView和reapply()之后我看不到视图中的更改.
View v = rv.apply(context,null); View my = v.findViewById(R.id.myViewId); processView(my); //this work's fine rv.reapply(context,my);
其次,更糟糕的选择是从RemoteViews获取我所需的视图,处理它,删除旧视图并使用addView()添加已处理的新视图.
RemoteViews rv = ... View my = ... //apply,find and process //remove old view RemoteViews rvMy = ... //create RemoteViews from View rv.addView(rvMy)
但我不知道如何从View创建RemoteViews(有可能吗?).任何想法如何解决这个问题?
解决方法
试试这种方式:
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget); remoteViews.setTextViewText(R.id.widget_textview,text); <---- here you can set text // Tell the widget manager appWidgetManager.updateAppWidget(appWidgetId,remoteViews);
这是一个了解小部件行为的有用帖子: